Самый простой способ понять это должен помнить, что, когда пиксель прозрачный, его цвет становится неактуальным, еще нет is сохранено.
Таким образом, если мы делаем непрозрачный 512x512 изображение случайного шума, как это:
convert -size 512x512 xc:gray +noise random a.png
и проверить его размер, вы можете увидеть это 1.5МБ:
[email protected] 1 mark staff 1.5M 26 Oct 09:14 a.png
Если я теперь сделать иначе идентичную, прозрачная версия:
convert -size 512x512 xc:gray +noise random -alpha transparent b.png
Вы можете увидеть, что файл стал больше (в 1.7MB), потому что теперь хранить прозрачность и оригинальный случайные данные. Я не буду показывать изображение, потому что нет ничего, чтобы увидеть:
[email protected] 1 mark staff 1.7M 26 Oct 09:16 b.png
теперь я могу сделать прозрачность слоя полностью непрозрачным и случайные пиксели снова становятся видимыми - таким образом, они все еще были там все вместе - даже когда изображение был прозрачным:
convert b.png -alpha opaque c.png
Если, однако, я сделать пиксели прозрачными снова, а также установить их все к цвету фона изображения (так как их цвет не имеет значения), например:
convert -size 512x512 xc:gray +noise random -alpha transparent -alpha background d.png
[email protected] 1 mark staff 1.8K 26 Oct 09:22 d.png
И вот теперь 1.5MB-файл почти в 1000 раз меньше на 1,8K, потому что он сжимается намного лучше, поскольку все (невидимые/прозрачные) цвета - это один сплошной цвет фона.
В ответ на ваш вопрос о координатах. Мы можем сделать немного изображения, как это:
convert -size 1x1 \
xc:red xc:cyan +append \
\(xc:yellow xc:magenta +append \) -append a.png
И сваливать это так:
convert a.png txt:
# ImageMagick pixel enumeration: 2,2,65535,srgb
0,0: (65535,0,0) #FF0000 red
1,0: (0,65535,65535) #00FFFF cyan
0,1: (65535,65535,0) #FFFF00 yellow
1,1: (65535,0,65535) #FF00FF magenta
И видим, что координаты пикселей в ImageMagick начинаются в верхнем левом углу.
Согласно значению RGBA, которое вы возвращаете, вы действительно выбираете прозрачный пиксель. «A» обозначает альфа-канал, обычно используемый для непрозрачности. Значение 0 для «a» означает, что оно полностью прозрачно. –
@ User5842 Правильно, но почему rgb синего '0,30,255'? – 3zzy
Что произойдет, если вы попытаетесь установить этот пиксель со значением RGBA? Значение RGB все равно может быть '0,30,255', это просто означает _blue с opacity_ –