2011-06-15 120 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