【发布时间】:2014-01-29 08:52:50
【问题描述】:
我有一个脚本,它使用 Imagick 从 .PSD 文件中提取图层并将它们保存为 .PNG 文件。问题是即使对于没有透明度的图层,PNG 也会被保存,这意味着文件大小会增加。我希望将这些文件保存为 JPEG。
Imagick 能否判断 PSD 文件中的图层是否具有透明度?
【问题讨论】:
标签: php imagemagick imagick
我有一个脚本,它使用 Imagick 从 .PSD 文件中提取图层并将它们保存为 .PNG 文件。问题是即使对于没有透明度的图层,PNG 也会被保存,这意味着文件大小会增加。我希望将这些文件保存为 JPEG。
Imagick 能否判断 PSD 文件中的图层是否具有透明度?
【问题讨论】:
标签: php imagemagick imagick
如果您想检测源图像中是否有 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 通道保存。
【讨论】:
保存PNG后,好像在运行
identify -format '%[channels]' filename.png
有效地返回 srgb / srgba。所以我会用它来保存为PNG,然后如果值为srgb,则转换为JPEG。
【讨论】: