Как связать преобразования изображений с помощью команды convert ImageMagick?

У меня есть исходное изображение (скажем, 1600x1200), для которого я хочу создать серию эскизов с различными разрешениями:

  • 900x0 (т.е. означает, что изображение масштабируется пропорционально 900 пикселей) широкий)
  • 700x0
  • 0x550 (т.е. означает, что изображение масштабируется пропорционально высоте 550 пикселей)
  • 0x400
  • 0x150
  • 200x200 (т.е. обрезано и центрировано)

Индивидуально, я могу обрабатывать каждое из этих преобразований с помощью команды convert . Проблема в том, что постоянная повторная инициализация convert - огромная трата ресурсов; было бы лучше связать вещи так, чтобы convert мог повторно использовать свою работу.

Используя ImageMagick 6.7.0-10 Я пробовал следующее (используя параметр + write , см. http://www.imagemagick.org/script/command-line-options.php#write ), но это не работает, поскольку команда + запись выглядит как неэффективны при восстановлении изображения в исходное состояние:

convert '/tmp/original.jpg'[0] -quality 95 -de density 72x72 -resample 72x72 + profile'! xmp, * '-resize' 900> '+ write '/tmp/900.jpg' -resize '700>' + write '/tmp/700.jpg' -resize '200x' -crop '200x200 + 0 + 35' + repage + write '/tmp/200.jpg' -resize 'x550>' + write '/tmp/550.jpg' -resize 'x400>' + write '/tmp/400.jpg' -resize 'x150>' '/tmp/150.jpg'[12186hibited Альтернативно , Я попробовал следующее (используя + clone и -delete ). Кажется, это работает, но, вероятно, его можно было бы сделать более эффективным (возможно, с помощью mpr: , http://www.imagemagick.org/Usage/files/#mpr ):

convert 'original.jpg' [0] -quality 95 -de density 72x72 -resample 72x72 + profile '! xmp, *' \ (+ clone -resize 'x150>' -write '150.jpg' \) -delete 1 \ (+ clone -resize 'x400>' -write '400.jpg' \) -delete 1 \ (+ clone -resize 'x550>' -write '550.jpg' \) -delete 1 \ (+ clone -resize ' 200x '-crop' 200x200 + 0 + 35 '+ repage -write' 200.jpg '\) -delete 1 \ (+ clone -resize' 700> '-write' 700.jpg '\) -delete 1 -resize' 900> '' 900.jpg '

Кто-нибудь может объяснить, что я делаю не так в первом примере (с помощью команды + write )? Кроме того, может ли кто-нибудь предложить какие-либо улучшения для повышения эффективности использования ЦП / памяти?

РЕДАКТИРОВАТЬ

Вот улучшение с использованием mpr:

convert 'original.jpg' [0] -quality 95-density 72x72 -resample 72x72 + profile '! xmp, *' -write mpr: orig + delete mpr: orig -resize 'x150>' -write '150.jpg' + delete mpr: orig -resize 'x400>' -write '400. jpg '+ delete mpr: orig -resize' x550> '-write' 550.jpg '+ delete mpr: orig -resize' 200x '-crop' 200x200 + 0 + 35 '+ repage -write' 200.jpg '+ delete mpr: orig -resize '700>' -write '700.jpg' + delete mpr: orig -resize '900>' 900.jpg '

Мне все еще любопытно, почему + write не не работает.

5
задан David Carney 5 July 2011 в 15:20
поделиться