Hatred's Log Place

DON'T PANIC!

Feb 16, 2012 - 1 minute read -

ImageMagick: вырезание произвольной области изображения

Изначально задача была: извлечь из изображения область ограниченную полигоном, при этом оставшаяся часть изображения должна залиться “прозрачным” цветом (сиречь размер в пикселях не поменяется). Но как оказалось, можно ещё более обобщить эту задачу - вытаскивать произвольные области изображения.

Рассматриваемый инструмент - ImageMagick или GraphicsMagick.

Решение нашлось тут: http://studio.imagemagick.org/pipermail/magick-users/2006-March/017281.html

Коротко суть: на основе исходного изображения (по сути используется только, что бы задать размеры) создаётся временное изображение-маска и нарисованной фигурой/фигурами которые образуются, если их обрисовать полигоном. Остальные пиксели на маске - прозрачные. Далее маска накладывается на исходное изображение и извлекается только нужная его часть…

Теперь на примере.

Есть изображение:

Нужно вырезать область, заданную полигоном (для простоты - треугольник) с координатами: (10,10)-(400,200)-(100,200)

Шаг 1. Делаем маску:

convert screenshot.png -matte -fill none -draw 'color 0,0 reset' -fill white -draw 'polygon 10,10,400,200,100,200' polygon.png

Получаем следующее (картинка белая :simple_smile: ):

Шаг 2. Вырезаем область:

convert screenshot.png -matte polygon.png -compose DstIn -composite out.png

Получаем чего желаем:

Команды рисования можно посмотреть тут: http://www.imagemagick.org/Usage/draw/

Tags: imagemagick image processing

C/C++ and JSON Axis VAPIX (HTTP API)

comments powered by Disqus