Как заложить круг с mogrify в одной команде

Я написал этот сценарий, и он работает нормально, но я хотел бы сделать все это за один шаг на лету, без дополнительного временного изображения.

объяснение: у меня много поврежденных файлов изображений, и я хочу нарисовать круг под каждым изображением. Для этого мне нужно создать временное изображение circle.png, а затем использовать "image DstOver", чтобы разместить его под каждым из изображений:

convert -size 200x200 xc:transparent -fill red -draw 'translate 100,100 circle 0,0 100,0' circle.png
mogrify -draw "image DstOver 0,0 0,0 'circle.png'" images/*.png

Что-то вроде:

mogrify -fill red -draw "DstOver translate 100,100 circle 0,0 100,0" images/*.png

Но это всегда дает мне ошибку, независимо от того, где я размещаю DstOver:

mogrify: non-conforming drawing primitive definition `DstOver' @ error/draw.c/DrawImage/3169.

2 ответа

Решение

Операторы композиции, такие как "DstOver", используются только с примитивом "image" для "-draw". Просто опустите это. Смотрите запись "-draw" в документации командной строки ImageMagick.

У вас может быть несколько опций "-draw", некоторые рисунки, такие как "круг..." и другие, например, "image DstOver...".

Я не уверен, что вы пытаетесь сделать, но в целом, mogrify будет что-то делать с multi-image operators или же stack operators, Единственное исключение, которое я знаю, это -draw image оператор, поэтому вам нужно создать свое изображение заранее, а затем использовать это:

# Blue rectangle with transparent centre
convert -size 200x200 xc:none -bordercolor blue -border 50 start.png

введите описание изображения здесь

# Your circle
convert -size 200x200 xc:white -fill red -draw 'translate 100,100 circle 0,0 100,0' circle.png

введите описание изображения здесь

# Now underlay
mogrify -draw "image DstOver 0,0 0,0 'circle.png'" start.png

введите описание изображения здесь

Другие вопросы по тегам