PHP imagick определяет прозрачность

Я хочу иметь возможность определить, является ли изображение прозрачным или нет, используя расширение Imagick PHP.

До сих пор единственная удача, которая у меня была, - это запустить exec() / какую-то другую команду и использовать инструмент командной строки ImageMagick для достижения этой цели. Вот что я имею в виду:

exec("identify -verbose example_transparent_image.png | grep \"Alpha\"", $output);
$is_transparent = !empty($output) ? true : false;

Логика проста. Выполните подробную проверку рассматриваемого изображения: если вывод содержит какую-либо информацию об альфа-канале, это означает, что он использует прозрачность.

Кажется, что расширение PHP imagick должно иметь это как одну из своих команд, но отсутствие документации меня убивает. Глупо каждый раз запускать такую ​​проверку.


person Scott    schedule 19.07.2011    source источник


Ответы (3)


Аааа, решено (я думаю). В Imagick есть функция getImageAlphaChannel(), которая возвращает true, если содержит информацию об альфа-канале, и false, если ее нет.

Убедитесь, что у вас установлен ImageMagick 6.4.0 или новее.

http://www.php.net/manual/en/function.imagick-getimagealphachannel.php

person Scott    schedule 22.07.2011
comment
Сам столкнувшись с этой проблемой, я запустил оба метода: identityimage и getimagealphachannel. Идентификация изображения просто не предоставляет достаточной информации, в то время как getimagealphachannel работал нормально. Теоретически, getImageAlphaChannel() предоставляет константу ALPHACHANNEL, но документация в этом отношении, откровенно говоря, бесполезна. Я получаю «0» для JPG, «1» для PNG с альфа-каналом и «0» для 32-битного без альфа-канала. В принципе, вполне ожидаемые результаты. Итак, несмотря на то, что это текущий вопрос / ответ 10-месячной давности, я подумал, что стоит добавить свои 2 цента. - person John Green; 01.05.2012

Может быть, это

http://ru.php.net/manual/ru/function.imagick-identifyimage.php

person azat    schedule 19.07.2011

Что насчет этого?

substr((new Imagick($FILE))->identifyImage()['type'], 0, -5) == 'Alpha'

просмотрите документацию для identityImage. Вы заметите отсутствие документации по выходным данным функций. Это просто разобранная версия

identify -verbose $FILE (from the imagick package)

где type определяет тип изображения (сравните источник). Вы можете видеть, что imagick возвращает значение из некоторый массив MagickTypeOptions, который определен здесь. Этот массив содержит версии -Alpha и -Matte для каждого типа изображения, если его цветовая палитра содержит альфа-канал.

Теоретически вы можете сохранить изображение с такой палитрой, не используя ее, но в этом случае каждая приличная программа должна перейти на не-альфа-версию. Но ложные срабатывания возможны, но должны быть редки.

Также я не проверяю типы изображений -Matte, потому что массив определен таким образом, что для каждой константы типа изображения есть две записи с разными именами (-Alpha > и -Matte), но так как -Alpha идет первым, это имя будет возвращено для этого типа изображения.

person Hoffmann    schedule 26.09.2015
comment
Не могли бы вы добавить некоторые пояснения и, например, ссылку на документацию, пожалуйста? - person David Ferenczy Rogožan; 27.09.2015