PHP Imagick обнаруживает прозрачность - PullRequest
10 голосов
/ 19 июля 2011

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

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 22 июля 2011

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

Убедитесь, что у вас установлена ​​версия ImageMagick 6.4.0 или более поздняя.http://www.php.net/manual/en/function.imagick-getimagealphachannel.php

0 голосов
/ 26 сентября 2015

Что по этому поводу?

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

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

identify -verbose $FILE (from the imagick package)

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

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

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

0 голосов
/ 19 июля 2011
...