Imagemagick: применить область выреза к другому изображению

#imagemagick

#imagemagick

Вопрос:

У меня есть изображение в формате PNG с прозрачным фоном, но содержимое непрозрачное. Прозрачный раздел — это маска, которую я хотел бы применить к другому изображению в формате PNG, чтобы они имели идентичные прозрачные разделы, но могли отличаться непрозрачным разделом.

Я пытался

 convert mask.png image.png -composite mask.png -compose copyopacity -composite image.png
  

но это, похоже, изменяет непрозрачный раздел в image.png.

Ответ №1:

В Imagemagick, предполагая, что два изображения имеют одинаковый размер, затем попробуйте

(Синтаксис Unix)

 convert 
opaque_image.png 
( transparent_image.png -alpha extract ) 
-alpha off -compose copy_opacity -composite 
result.png
  

(Синтаксис Windows)

 convert ^
opaque_image.png ^
( transparent_image.png -alpha extract ) ^
-alpha off -compose copy_opacity -composite ^
result.png
  

Возможно, что ваше прозрачное изображение не имеет двоичного альфа-канала. Например, значения alpha могут быть равны 0 (полностью прозрачными) в областях, которые вы хотите удалить, но могут составлять, скажем, только 80% в областях, которые вы хотите сохранить. В этом случае это изменит непрозрачные области, которые вы хотите сохранить. Одним из решений было бы установить пороговое значение маски перед ее применением к непрозрачному изображению.

Комментарии:

1. Спасибо за хороший ответ! Этот ответ привел меня к дальнейшим выводам. Вы правы, что мне нужно использовать пороговое значение, поскольку прозрачное изображение имеет недвоичный альфа-канал. Однако я заметил, что opaque_image также имеет недвоичный альфа-канал (неправильное название). Я хотел бы оставить альфа-канал внутри области белой маски, установив альфа-значение 0 в черной области.

2. Вам нужно будет извлечь оба альфа-канала, перемножить их вместе, затем добавить этот результат в качестве нового альфа-канала к непрозрачному изображению. Если вы не знаете, как это сделать, тогда разместите свои два изображения, и я покажу вам команды. Чтобы умножить два изображения, вы можете использовать -compose multiply -composite или -evaluate-sequence multiply .