У меня есть два JPG, один big.jpg и другой small.jpg . Я хочу извлечь регион region.jpg из big.jpg того же размера, что и small.jpg и объединить region.jpg и small.jpg в result.jpg . result.jpg равен small.jpg , за исключением границы в 16 пикселей, где он становится все более похожим на region.jpg .

Используя ImageMagick, я сделал это в два этапа, сначала сделав полупрозрачный PNG:

convert -compress None small.jpg -channel A -virtual-pixel transparent -morphology Distance Euclidean:4,16! semitransparent.png
convert -compress None big.jpg -crop wxh+x+y semitransparent.png -composite result.jpg

Есть ли способ сделать это за один шаг, не генерируя промежуточный PNG? Я попробовал это:

convert -compress None big.jpg -crop wxh+x+y small.jpg -channel A -virtual-pixel transparent -morphology Distance Euclidean:4,16! -composite result.jpg

Но это не совсем то же самое: полупрозрачный слой не становится действительно прозрачным по краю.

Я новичок в ImageMagick (что за сложная часть программного обеспечения!), Любые предложения будут оценены.

РЕДАКТИРОВАТЬ

Я добавляю файлы big.jpg и small.jpg для игры вместе с result.jpg который выходит из двухстрочного решения, и result2.jpg который выходит из oneliner. -crop я использовал 200x160+160+80

big.jpg big.jpg

small.jpg small.jpg

result.jpg result.jpg (2-х строчное решение)

result2.jpg result2.jpg (oneliner)

1 ответ1

1

Извините, но я только что нашел ответ. Просто добавьте -compose atop -composite:

convert -compress None big.jpg -crop 200x160+160+80 small.jpg \
  -channel A -virtual-pixel transparent \
  -morphology Distance Euclidean:4,16! \
  -compose atop -composite result.jpg

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .