我有一個使用Imagick從.PSD文件提取圖層並將其保存爲.PNG文件的腳本。問題是,即使對於沒有透明度的圖層,PNG也會被保存,這意味着文件的大小會增加。我寧願將這些文件保存爲JPEG。將PSD圖層保存爲帶有Imagick的PNG/JPG,具體取決於透明度
Can Imagick可以告訴PSD文件中的圖層是否具有透明度嗎?
我有一個使用Imagick從.PSD文件提取圖層並將其保存爲.PNG文件的腳本。問題是,即使對於沒有透明度的圖層,PNG也會被保存,這意味着文件的大小會增加。我寧願將這些文件保存爲JPEG。將PSD圖層保存爲帶有Imagick的PNG/JPG,具體取決於透明度
Can Imagick可以告訴PSD文件中的圖層是否具有透明度嗎?
保存PNG文件後,似乎運行
identify -format '%[channels]' filename.png
有效地返回要麼的sRGB/srgba。所以我會用它來保存到PNG,然後如果值爲srgb則轉換爲JPEG。
如果要檢測源圖像是否包含Alpha通道,則可以致電$imagick->getImageAlphaChannel()
。
如果要測試alpha通道是否實際上修改了圖像,即包含完全不透明的圖像,則可以撥打$image->getImageChannelStatistics();
。其中的值可能僅在圖像具有Alpha通道時纔有效。具有影響圖像的alpha的圖像具有以下alpha值的值。
[8] => Array (
[mean] => 46867.721934066
[minima] => 0
[maxima] => 65535
[standardDeviation] => 26491.889090216
[depth] => 16
)
不使用透明度的圖像具有值
[8] => Array (
[mean] => 0
[minima] => 3.3999999521444E+38
[maxima] => -3.3999999521444E+38
[standardDeviation] => 0
[depth] => 1
)
這似乎僞造的。
所以只有一個alpha通道的圖像,並沒有1(或者說Qunatum值,也許2 ^^ 16)的alpha通道統計中的平均值和0的標準偏差,將需要使用Alpha通道保存。