У меня есть изображение в памяти, и я хочу выполнить метод imagemagick convert
, используя Python's subprocess
. В то время как эта линия хорошо работает с помощью терминала в Ubuntu:Python subprocess: pipe image blob to imagemagick shell command
cat image.png | convert - new_image.jpg
Этот фрагмент кода не работает с помощью Python:
jpgfile = Image.open('image.png');
proc = Popen(['convert', '-', 'new_image.jpg'], stdin=PIPE, shell=True)
print proc.communicate(jpgfile.tostring())
Я также попытался считывания изображения в качестве обычного файла без использования PIL, я попытался переключиться между subprocess
методами и разными способами записи в stdin.
Лучшая часть, ничего не происходит, но я не получаю реальной ошибки. При печати стандартного вывода я могу видеть ImageMagick помощи на терминале, а затем следующее:
По умолчанию, формат изображения файла `» определяются его волшебной числа. Чтобы указать конкретный формат изображения, предварите имя файла с именем формата изображения и двоеточием (например, ps: изображение) или укажите тип изображения в качестве суффикса имени файла (например, image.ps). Укажите «файл» как '-' для стандартного ввода или вывода. (Нет, нет)
Возможно, здесь есть намек, который я не получаю. Пожалуйста, указывайте мне в правильном направлении, я новичок в Python, но из моего опыта работы с PHP это должно быть очень простой задачей, или я надеюсь.
Edit:
Это решение, которое я в конечном счете используется для обработки PIL изображение объекта без сохранения временного файла. Надеюсь, это поможет кому-то. (В примере я читаю файл с локального диска, но идея состоит в том, чтобы прочитать изображение из удаленного местоположения)
out = StringIO()
jpgfile = Image.open('image.png')
jpgfile.save(out, 'png', quality=100);
out.seek(0);
proc = Popen(['convert', '-', 'image_new.jpg'], stdin=PIPE)
proc.communicate(out.read())
Это не помогает мне, потому что я хочу передать изображение из памяти * без необходимости создавать физическую копию на диске. Все ваши примеры касаются чтения файла изображения. Попытка передать объект изображения в stdin не работает, ничего не происходит, как я описал в вопросе. – iMoses
Итак, откуда взялось изображение? –
Я использую прокси для чтения изображения через HTTP, и я хочу использовать сам blob для создания оптимизированных версий изображения без необходимости сохранения оригинала на диске. Я знаю, что это не должно быть проблемой при использовании других языков программирования, я понятия не имею, как реализовать его с помощью Python. – iMoses