使用Imagick将PSD图层保存为PNG / JPG,具体取决于透明度

时间:2014-01-29 08:52:51

标签: php imagemagick imagick

我有一个脚本,使用Imagick从.PSD文件中提取图层并将其保存为.PNG文件。问题是即使对于没有透明度的图层,也会保存PNG,这意味着文件大小会增加。我希望将这些文件保存为JPEG格式。

Imagick可以判断PSD文件中的图层是否具有任何透明度?

2 个答案:

答案 0 :(得分:1)

如果要检测源图像中是否包含Alpha通道,则可以调用$imagick->getImageAlphaChannel()

如果您想测试Alpha通道是否实际修改了图像,即包含完全不透明以外的其他内容,则可以调用$image->getImageChannelStatistics();。仅当图像具有Alpha通道时,其中的值才有效

e.g。具有影响图像的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),并且标准偏差为0,则需要使用Alpha频道保存。

答案 1 :(得分:0)

保存PNG后,似乎正在运行

identify -format '%[channels]' filename.png

有效地返回 srgb / srgba 。所以我将使用它来保存到PNG,然后如果值 srgb 则转换为JPEG。