Использование ImageMagick для создания эскизов изображений, хранящихся в Amazon S3

Я хочу использовать утилиту преобразования ImageMagick для создания эскизов изображений, хранящихся в S3. Я пишу это на Python.

Как мне подойти к этому?

Должен ли я прочитать изображение с S3, сохранить его во временную папку на экземпляре EC2, сгенерировать эскиз во временный каталог, затем поместить временный файл в S3 и удалить его?

Или я могу «передать» результат из S3 прямо в ImageMagick, не сохраняя его на локальный диск?

Есть рекомендуемый способ сделать это?

Заранее спасибо.


person ensnare    schedule 30.08.2012    source источник


Ответы (1)


Вы можете использовать подпроцесс с файловыми объектами и напрямую передавать их imagemagick. Например, здесь я конвертирую онлайн-png в jpg без использования временных файлов.

import subprocess
import urllib2
import sys 
source = urllib2.urlopen('http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png')
p = subprocess.Popen(['convert','png:-', 'jpg:-'], stdin=source, stdout=subprocess.PIPE)
p.communicate()[0] # this is your converted image
person gbin    schedule 30.08.2012
comment
Будет ли для этого использоваться много памяти? - person ensnare; 31.08.2012
comment
Если вы передаете процесс другому дескриптору, использование памяти должно быть минимальным: только буферы процесса преобразования, которые, как я полностью предполагаю, зависят от его реализации, но должны иметь размер распакованного изображения + размер распакованного эскиза. Если у них получилось лучше, у них действительно хорошая внутренняя реализация;) - person gbin; 31.08.2012
comment
Спасибо. Как я могу расширить это, чтобы создать несколько размеров миниатюр? Если я введу другую строку subprocess.Popen (...) с другими размерами, будет ли он повторно загружать все полное изображение из S3? - person ensnare; 31.08.2012
comment
Каждый раз, когда я выполняю приведенный выше код, я получаю следующую ошибку: convert: неправильный заголовок изображения -' @ error/png.c/ReadPNGImage/3246. convert: missing an image filename jpg: - '@ error / convert.c / ConvertImageCommand / 3011. - person ensnare; 31.08.2012