Библиотека изображений python не может сохранять PNG в JPG

Я установил 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
</module>
4 ответа

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


Спасибо @jterrace за предложение доморощенного.

Решение:

Install homebrew 
brew install python 
brew install pil


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

Я боролся с поддержкой 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 (они были установлены в 4.0, чтобы установить MySQLdb)

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 бит для вас!)


Похоже, вам нужно предпринять дополнительные шаги для работы с 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/

licensed under cc by-sa 3.0 with attribution.