Я хочу создать изображение для других, которое является результатом convert
операций самостоятельно, без сохранения промежуточных результатов в файловой системе.
Длинное объяснение:
У меня есть два изображения, два из которых требуют определенных преобразований:
- avatar.jpg необходимо преобразовать в закругленное изображение -> rounded-avatar.jpg
- К background.jpg должен быть применен цветной слой -> color-background.jpg
Затем я хочу dissolve
rounded-avatar.png в color-background.jpg, чтобы получить что-то вроде этого:
+-----------+ | O | +-----------+
Что у меня есть:
Я знаю, как выполнять эти операции последовательно (возможно, это не лучший способ, но это не тема этого вопроса), я даже сделал рабочий сценарий bash:
#!/bin/bash
convert $1 -alpha set -background none -vignette 0x0 rounded-avatar.png
convert $2 -auto-orient -thumbnail 600x313^ -gravity center -extent 600x313 -region 100%x100% -fill "#256997" -colorize 72% colored-background.jpg
composite -dissolve 100 -gravity Center rounded-avatar.png colored-background.jpg -alpha Set $3
Что я могу назвать это
$ ./myScript.sh avatar.jpg background.jpg output.jpg
Чего я хочу:
Я хочу избежать сохранения двух временных изображений (Round-avatar.jpg и color-background.jpg) в файловой системе.
Почему?
- Эта процедура должна выполняться автоматически на веб-платформе, я не хочу обрабатывать параллелизм в этих временных файлах с помощью уловок с именами.
- Текущий сценарий заставляет IM загружать изображения два раза в память, вероятно, было бы более эффективно повторно использовать вычисленные изображения вместо того, чтобы записывать их на диск, а затем загружать их в новом процессе.
- В наши дни дискового ввода-вывода мало, давайте немного сэкономим.
Надеюсь, мне просто не хватает правильных ключевых слов, чтобы найти ответ в документации.
Я понимаю, что это может показаться чрезмерной оптимизацией, и я не борюсь с проблемами C10k здесь, но я просто хочу сделать это правильно (и понять синтаксис IM).