ImageMagick - Альфа-маска на прозрачном фоне - PullRequest
1 голос
/ 25 мая 2019

Я хочу объединить несколько 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 ]

1 голос
/ 27 мая 2019

Используя 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", "-альфа-копия" избавляется от черного, а "-set compose" применяет метод compose "плюс" к этому отдельному изображению.

Затем страницаразмер установлен в 256x256, и все части выровнены и расположены согласно их геометрии страницы.Поскольку для фона задано значение «none», прозрачный холст создается при выравнивании подизображений.

По умолчанию используется метод compose «over», поэтому он используется на изображениях без установленного метода compose.Изображение маски сглаживается с помощью метода compose «плюс».

Я тестировал это с IM6 на bash и с IM7 на Windows.Я изменил мой IM6 bash "convert" на "magick" для этого примера IM7.Он должен работать точно так же с любой версией.

1 голос
/ 25 мая 2019

В 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


enter image description here

ДОПОЛНЕНИЕ: Я думаю, это то, что вы хотите от вашего комментария.

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


enter image description here

...