Если вы хотите убедиться, что изображение действительно прозрачное ... (не только альфа-канал, который может быть не использован)
Используйте эту команду:
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
.