2011-06-15 20 views
4

在PHP代码中,给定一个.png图像路径,我需要检测该图像的位深度。我怎样才能做到这一点?如何让PHP获取给定PNG图像文件的位深度?

我试过使用getImageSize()并且读取bits作为下面的示例代码,但对于24位/ 32位图像,它总是返回'8'。

请帮忙。

class Utils { 
    //Ham de lay bits cua image 
    public static function getBits($image) { 
     $info = getImageSize($image); 
     return $info['bits']; 
    } 
} 
+3

我的猜测意味着每通道8位。 – Rufinus 2011-06-15 09:42:02

+1

@cweiske对于我68%的收费标准,我感到抱歉 - 我有很多问题仍然没有得到解决。你能帮我吗? – 2011-06-15 18:21:19

+0

@hakre我总是选择最正确的答案作为接受的答案。我只需要你明白,我的问题中有32%仍然不正确,我不让他们接受 - 不是因为我是一个粗心的人:)。无论如何,谢谢你的提醒。 – 2011-06-26 01:57:08

回答

4

PNG图像不说支持渠道通过getimagesize()。然而,你可以使用一个小功能来获得这些值:get_png_imageinfo()

$file = 'Klee_-_Angelus_Novus.png'; 
$info = get_png_imageinfo($file); 
print_r($info); 

为您提供的示例图片:

Array 
(
    [bit-depth] => 4 
    [bits] => 4 
    [channels] => 1 
    [color] => 3 
    [color-type] => Indexed-colour 
    [compression] => 0 
    [filter] => 0 
    [height] => 185 
    [interface] => 0 
    [width] => 291 
) 

它返回通道和位,以及像有些人会想到他们从getimagesize()除了特定于PNG格式的更多信息之外。位和通道旁边的值的含义是documented in the PNG specification

+0

'get_png_imageinfo'似乎与PHP 5.5(与5.4完美配合)破碎。它在'array_shift'比较失败。 ''unpack()'中可能有新东西。 – Jeff 2014-07-07 19:13:14

8

getImageSize documentation

比特是用于每一种颜色的比特数。

所以8位是正确的,因为如果有三个通道(RGB),每个通道8位,则最终总共有24位。另外一个alpha通道为您提供了另一个八位,共计32

,请返回此:

return $info['channels'] * $info['bits']; 

这并不适用于每一种图像类型的工作,但是。阅读文档以了解gif和jpeg的工作方式。

+1

是的。它不适用于PNG图像。所以PHP无法处理PNG位深问题,可以吗?我真的感到奇怪,因为PHP正在快速增长 – 2011-06-15 18:23:42