ImageMagick - Альфа-маска на прозрачном фоне
Я хочу объединить несколько PNG на один PNG с помощью Imagemagick.
Одним из изображений (b_0_1.png) является маска. Мне нужно применить это с помощью аддитивной композиции.
Но есть проблема с фоном в результате, который должен быть прозрачным, но имеет черный квадрат.
Вот моя команда:
magick -size 256x256 canvas:transparent \
img/a_0_0.png -geometry +111+64 -compose over -composite \
img/b_0_1.png -geometry +94+48 -compose plus -composite \
img/c_0_0.png -geometry +108+88 -compose over -composite \
img/d_0_0.png -geometry +102+62 -compose over -composite \
png32:result.png
Результат: https://picr.ws/i/6WT
Черная область должна быть прозрачной.
Изображения: http://s000.tinyupload.com/index.php?file_id=91925640425537122879
2 ответа
Используя ImageMagick 7, вы можете использовать такую команду...
magick -background none \
\( -page +111+64 a_0_0.png \) \
\( -page +94+48 b_0_1.png -alpha copy -set compose plus \) \
\( -page +108+88 c_0_0.png \) \
\( -page +102+62 d_0_0.png \) \
-page 256x256 -flatten png32:result.png
Это установило бы геометрию подкачки для каждого подизображения в пределах их собственных скобок.
Внутри скобок с изображением маски "b_0_1.png" "-alpha copy" избавляется от черного, а "-set compose" применяет метод compose "плюс" к этому отдельному изображению.
Затем размер страницы устанавливается на 256x256, и все части сглаживаются и располагаются в соответствии с их геометрией страницы. Поскольку для фона задано значение "none", прозрачный холст создается, когда подизображения сглаживаются.
Метод compose "over" используется по умолчанию, поэтому он используется для изображений без установленного метода compose. Изображение маски сглаживается с помощью метода сложения "плюс".
Я проверял это с IM6 на bash и с IM7 на Windows. Я изменил мой IM6 bash "convert" на "magick" для этого примера IM7. Он должен работать точно так же с любой версией.
В ImageMagick вы могли бы сделать
magick -size 256x256 canvas:transparent \
-channel rgb \
img/a_0_0.png -geometry +111+64 -compose over -composite \
img/b_0_1.png -geometry +94+48 -compose plus -composite \
img/c_0_0.png -geometry +108+88 -compose over -composite \
img/d_0_0.png -geometry +102+62 -compose over -composite \
png32:result.png
ДОПОЛНЕНИЕ: Я думаю, что это то, что вы хотите от вашего комментария.
magick -size 256x256 canvas:transparent \
img/a_0_0.png -geometry +111+64 -compose over -composite \
\( img/b_0_1.png -alpha opaque -alpha copy \) -geometry +94+48 -compose plus -composite \
img/c_0_0.png -geometry +108+88 -compose over -composite \
img/d_0_0.png -geometry +102+62 -compose over -composite \
png32:result.png