我有一个使用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通道保存。