2016-07-16 1 views
0

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

пояснение: у меня много поврежденных файлов изображений, и я хочу нарисовать круг под каждым изображением. для этого я должен создать временную circle.png изображения, а затем использовать «изображение 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. 

ответ

1

Состав операторы, такие как «DstOver» используются только с «изображением» Примитив «-draw». Просто пропустите это. См. Запись «-draw» в документации ImageMagick commandline.

У вас может быть несколько параметров «-draw», некоторые рисунки, такие как «круг ...» и другие, такие как «изображение DstOver ...».

+0

о, поэтому я не могу положить что-нибудь ниже моего изображения с mogrify? возможно, с изображением, определяемым как xc:? –

+1

Да, это ограничение -draw, что оно не принимает составной_оператор, кроме как с примитивом «image», и что -draw игнорирует глобальный оператор компоновки. И это ограничение mogrify, что оно не принимает параметр -compose. Либо, либо оба будут полезными функциями для добавления в * Магию. –

+0

хорошо, приятно видеть, что даже такой инструмент badass не способен на все .. (пока). По крайней мере, я могу работать с временным изображением, так что все-таки классная штука! Спасибо! –

1

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

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

enter image description here

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

enter image description here

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

enter image description here

+0

Да, это то, что я уже делаю, см. Код в вопросе. thx для подробного объяснения в любом случае! –

+0

только что прочитал мой вопрос и добавил объяснение, что он на самом деле делает, извините;) –

Смежные вопросы