Составная графика и обрезка в одной команде
Мне нужно получить определенный фрагмент изображения и поместить его поверх другого изображения в определенной позиции и изменить его размер.
Я могу обрезать первое изображение и сохранить его в файл в одной команде, а затем я могу объединить 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