Сохраните слой PSD в формате PNG/JPG с помощью Imagick в зависимости от прозрачности

У меня есть скрипт, который использует Imagick для извлечения слоев из файлов .PSD и сохраняет их как файлы .PNG. Проблема в том, что даже для слоев без прозрачности сохраняются PNG, что означает увеличение размера файла. Я бы предпочел, чтобы эти файлы были сохранены в формате JPEG.

Может ли Imagick определить, будет ли слой в файле PSD иметь прозрачность или нет?


person josef.van.niekerk    schedule 29.01.2014    source источник


Ответы (2)


Вы можете просто вызвать $imagick->getImageAlphaChannel(), если хотите определить, есть ли в исходном изображении альфа-канал.

Если вы хотите проверить, действительно ли альфа-канал изменяет изображение, т. е. содержит ли он что-то кроме полностью непрозрачного, вы можете вызвать $image->getImageChannelStatistics();. Значения в этом могут быть действительными только в том случае, если изображение имеет альфа-канал.

например Изображение с альфа-каналом, влияющим на изображение, имеет следующие значения альфа-канала.

[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 
) 

которые кажутся ложными.

Таким образом, только изображение с альфа-каналом, которое не имеет одновременно 1 (или, скорее, значения Qunatum, то есть, вероятно, 2 ^^ 16) для среднего значения в статистике альфа-канала и 0 для стандартного отклонения, потребует сохранения с альфа-канал.

person Danack    schedule 30.01.2014

После сохранения PNG кажется, что работает

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

фактически возвращает либо srgb, либо srgba. Поэтому я буду использовать это для сохранения в PNG, а затем конвертировать в JPEG, если значение равно srgb.

person josef.van.niekerk    schedule 29.01.2014