Если вы хотите проверить, действительно ли изображение прозрачное ... (а не только альфа-канал, который может быть неиспользованным)
Используйте эту команду:
convert some_pic.png -verbose info:
(да, в конце команды стоит :
)
Это довольно многословно. Ищите список каналов:
(...)
Channel depth:
red: 16-bit
green: 16-bit
blue: 16-bit
Channel statistics:
(...)
В этом примере есть три канала, по одному для каждого основного цвета. Но не для альфы. Итак, это изображение не прозрачное.
Но вы также можете получить такой вывод:
(...)
Channel depth:
red: 16-bit
green: 16-bit
blue: 16-bit
alpha: 1-bit
Channel statistics:
(...)
Здесь есть альфа-канал. Однако это не доказывает, что изображение прозрачное. Он просто говорит, что может быть. В выходных данных команды ищите информацию об альфа-канале:
(...)
Alpha:
min: 255 (1)
max: 255 (1)
mean: 255 (1)
standard deviation: 0 (0)
kurtosis: 0
skewness: 0
(...)
В этом примере альфа говорит, что изображение непрозрачно: min
= max
= 1 (1 = непрозрачный, 0 = прозрачный). Таким образом, даже если изображение имеет альфа-канал, пользователь видит непрозрачное изображение.
Вы также можете получить это:
(...)
Alpha:
min: 95 (0.372549)
max: 212 (0.831373)
mean: 111.187 (0.436028)
standard deviation: 19.5635 (0.0767196)
kurtosis: 7.52139
skewness: -2.80445
(...)
На этот раз min
= 0,372549. Это означает, что некоторые пиксели частично прозрачны. mean
тоже низкий. Кажется, что большая часть изображения использует прозрачность.
В зависимости от типа проверки, которую вы хотите выполнить (полная непрозрачность, «почти непрозрачность» и т. Д.), Вы должны проверить min
, mean
и, возможно, standard deviation
, если ваш запрос немного сложен.
Примечание: у вас может возникнуть соблазн проверить целочисленные значения для min
, mean
и других, как я это сделал в первую очередь. В конце концов, с 95
легче иметь дело, чем с 0.372549
. Если вы выберете этот маршрут, обратите внимание на глубину альфа-канала. Если это 8 бит, то 255 является максимумом и означает «непрозрачный». Если это 16 бит, то теперь максимум 65535, а 255 означает «почти прозрачный». Лучше проверьте числа с плавающей запятой в круглых скобках, которые всегда находятся в диапазоне от 0 до 1.
Если вы подозреваете, что у многих изображений, которые вы будете обрабатывать, вообще нет альфа-канала, может быть полезно сначала запустить:
identify -format '%[channels]' some_pic.png
Если вываливает:
rgba
есть альфа-канал (a
на выходе) и convert
следует использовать для проверки min
и т. д. Но если его нет, нет необходимости запускать convert
. Хотя я не тестировал эти две команды, identify
должно быть намного быстрее, чем convert
.
person
philippe_b
schedule
20.09.2013