Составная графика и обрезка в одной команде

Мне нужно получить определенный фрагмент изображения и поместить его поверх другого изображения в определенной позиции и изменить его размер.

Я могу обрезать первое изображение и сохранить его в файл в одной команде, а затем я могу объединить 2 изображения в другой команде. Тем не менее, я хотел бы сделать это в одной команде - это возможно с graphicsmagick и как?

Вот две команды, которые я использую atm:

gm convert -crop 1457x973+254+413 amber.jpg tmp.jpg
gm composite -geometry 6000x4000+600+600 tmp.jpg lux_bg.png out.jpg

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

convert lux_bg.png \( amber.jpg -crop 1457x973+254+413 \) -geometry 6000x4000+600+600 -composite out.jpg

Я делаю это с ImageMagick сейчас, но хотел бы сделать это с GraphicsMagick.

2 ответа

Если ваша причина просто to avoid creating a temporary file Вы все еще можете сделать это с помощью двух команд, создав " конвейеры " (замечательная концепция, изобретенная Дагласом Макилрой в 1964 году):

gm convert -crop 1457x973+254+413 amber.jpg - | gm composite -geometry 6000x4000+600+600 - lux_bg.png out.jpg

подсказка: обратите внимание на два - тире в двух командах, и | труба

так как - может использоваться для обозначения стандартного вывода и ввода в двух командах соответственно.

Это означает, что файл не создается, все должно происходить в памяти.

Вы можете найти это в справке (gm -help convert | grep -i -e out -B 1):

Укажите "file" как "-" для стандартного ввода или вывода.

Использование - распространено в unix-like и должно быть вдохновлено или связано с рекомендациями синтаксиса утилит стандарта POSIX.

Ты пытался && оператор? Your command should become:

gm convert -crop 1457x973+254+413 amber.jpg tmp.jpg && gm composite -geometry 6000x4000+600+600 tmp.jpg lux_bg.png out.jpg
Другие вопросы по тегам