我有一个脚本,使用Imagick从.PSD文件中提取图层并将其保存为.PNG文件。问题是即使对于没有透明度的图层,也会保存PNG,这意味着文件大小会增加。我希望将这些文件保存为JPEG格式。
Imagick可以判断PSD文件中的图层是否具有任何透明度?
答案 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。