Библиотека изображений Python не может сохранить PNG в JPG - PullRequest
3 голосов
/ 17 ноября 2011

Я установил PIL 1.1.7 из источника на Mac OSX.Я также установил необходимые библиотеки из Macports.Использование python 2.6.

После установки PIL я мог успешно запустить selftest.py (все тесты проходят)

Но когда я пытаюсь запустить следующий код, я обнаружил, что не могуконвертировать PNG в JPG.Однако я могу конвертировать PNG в GIF, PNG в PPM.Я также могу читать JPG.

import os
import sys 
import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    print outfile
    if infile != outfile:
        try:
            Image.open(infile).save(outfile, 'jpg') #Note: gif or ppm works
        except IOError:
            print "cannot convert", infile
            if os.path.exists(outfile):
               print 'cleaning up...'
               os.remove(outfile)

** обновление с трассировкой стека.Похоже, кодер отсутствует.Однако я установил libjpeg через macport.

Очистка ...

Traceback (most recent call last):
  File "convert_to_jpeg.py", line 15, in <module>
    Image.open(infile).save(outfile, 'jpeg')
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/Image.py", line 1439, in save
    save_handler(self, fp, filename)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/JpegImagePlugin.py", line 471, in _save
    ImageFile._save(im, fp, [("jpeg", (0,0)+im.size, 0, rawmode)])
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/ImageFile.py", line 495, in _save
    e = Image._getencoder(im.mode, e, a, im.encoderconfig)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/Image.py", line 401, in _getencoder
    raise IOError("encoder %s not available" % encoder_name)
IOError: encoder jpeg not available

Ответы [ 4 ]

4 голосов
/ 17 ноября 2011

Используйте jpeg, а не jpg для идентификатора формата.

2 голосов
/ 18 ноября 2011

Спасибо @jterrace за предложение домашнего приготовления.

Решение:

Install homebrew 
brew install python 
brew install pil
1 голос
/ 18 ноября 2011

Вы играете мою песню.

Я боролся с поддержкой JPEG в PIL в течение нескольких недель, прежде чем я попал по этой ссылке: http://proteus -tech.com / blog / cwt / install-pil-in-snow-leopard /

Это единственное, что сработало. Горькие детали моего процесса удаления и повторной установки здесь: http://www.thetoryparty.com/2010/08/31/pil-on-snow-leopard-_jpeg_resync_to_restart-error/

Краткое описание того, что я сделал:

1) Принудительное использование путей gcc и gcov до 4.2 (для установки MySQLdb было установлено значение 4.0)

2) В моем .profile закомментированы некоторые строки ARCHFLAGS, которые у меня возникали (возможно, необязательный шаг?)

3) Выбрал через мою систему, чтобы удалить ВСЕ, называемое «libjpeg», «PIL» или «Imaging», - чтобы очистить дом

4) Выполните действия, указанные в приведенной выше ссылке на proteus-tech, начиная с загрузки свежего libjpeg.

Удачи! Вы можете сделать это!

(PS: обратите внимание, что если вы получили ошибку из selftest.py, в частности «IOError: ошибка декодирования при чтении файла изображения»), и вы НЕ МОЖЕТЕ загрузить JPEG, то это процесс, который решена эта проблема:

http://www.thetoryparty.com/2011/04/07/pil-and-jpeg-decoding-error-the-revenge/ Это может быть интересно, если позже у вас возникнут другие проблемы.

Обратите внимание, что обе проблемы связаны с необходимостью сборки libjpeg с "-arch i386", а не с "-arch x86_64". Так что это удовольствие 64 бит для вас!)

1 голос
/ 17 ноября 2011

Похоже, вам нужно предпринять некоторые дополнительные шаги для работы с JPG с PIL на Mac OSX.

Я нашел несколько ссылок, но ничего вы не смогли найти в Google:

http://websaucesoftware.com/uncategorized/getting-pil-installed-on-os-x-10-6-snow-leopard-with-jpeg-support

http://code.davidjanes.com/blog/2009/11/16/pil-libjpeg-jpeg-and-mac-osx-snow-leopard/

...