PIL does support JPEG in my system.
Whenever I do an upload, my code is failing with:
File "PIL/Image.py", line 375, in _getdecoder
raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available
How can I resolve this?
libjpeg-dev is required to be able to process jpegs with pillow (or PIL), so you need to install it and then recompile pillow. It also seems that libjpeg8-dev is needed on Ubuntu 14.04
If you're still using PIL then you should really be using pillow these days though, so first pip uninstall PIL
before following these instructions to switch, or if you have a good reason for sticking with PIL then replace "pillow" with "PIL" in the below).
On Ubuntu:
# install libjpeg-dev with apt
sudo apt-get install libjpeg-dev
# if you're on Ubuntu 14.04, also install this
sudo apt-get install libjpeg8-dev
# reinstall pillow
pip install --no-cache-dir -I pillow
If that doesn't work, try one of the below, depending on whether you are on 64bit or 32bit Ubuntu.
For Ubuntu x64:
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib
sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib
Or for Ubuntu 32bit:
sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so /usr/lib/
sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6 /usr/lib/
sudo ln -s /usr/lib/i386-linux-gnu/libz.so /usr/lib/
Then reinstall pillow:
pip install --no-cache-dir -I pillow
(Edits to include feedback from comments. Thanks Charles Offenbacher for pointing out this differs for 32bit, and t-mart for suggesting use of --no-cache-dir
).
For those on OSX, I used the following binary to get libpng and libjpeg installed systemwide:
Because I already had PIL installed (via pip on a virtualenv), I ran:
pip uninstall PIL
pip install PIL --upgrade
This resolved the decoder JPEG not available
error for me.
UPDATE (4/24/14):
Newer versions of pip require additional flags to download libraries (including PIL) from external sources. Try the following:
pip install PIL --allow-external PIL --allow-unverified PIL
See the following answer for additional info: pip install PIL dont install into virtualenv
UPDATE 2:
If on OSX Mavericks, you'll want to set the ARCHFLAGS
flag as @RicardoGonzales comments below:
ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install PIL --allow-external PIL --allow-unverified PIL
This is the only way that worked for me. Installing packages and reinstalling PIL didn't work.
On ubuntu, install the required package:
sudo apt-get install libjpeg-dev
(you may also want to install libfreetype6 libfreetype6-dev zlib1g-dev
to enable other decoders).
Then replace PIL with pillow:
pip uninstall PIL
pip install pillow
pip install pillow --upgrade
.
The followed works on ubuntu 12.04:
pip uninstall PIL
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev
pip install PIL --upgrade
when your see "-- JPEG support avaliable" that means it works.
But, if it still doesn't work when your edit your jpeg image, check the python path !! my python path missed /usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/
, so I edit the ~/.bashrc
add the following code to this file:
Edit: export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/
then, finally, it works!!
On Fedora 17 I had to install libjpeg-devel
and afterwards reinstall PIL
:
sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL
Rolo's answer is excellent, however I had to reinstall Pillow by bypassing pip cache (introduced with pip 7) otherwise it won't get properly recompiled!!! The command is:
pip install -I --no-cache-dir -v Pillow
and you can see if Pillow has been properly configured by reading in the logs this:
PIL SETUP SUMMARY
--------------------------------------------------------------------
version Pillow 2.8.2
platform linux 3.4.3 (default, May 25 2015, 15:44:26)
[GCC 4.8.2]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
*** OPENJPEG (JPEG2000) support not available
--- ZLIB (PNG/ZIP) support available
--- LIBTIFF support available
--- FREETYPE2 support available
*** LITTLECMS2 support not available
*** WEBP support not available
*** WEBPMUX support not available
--------------------------------------------------------------------
as you can see the support for jpg, tiff and so on is enabled, because I previously installed the required libraries via apt (libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev)
On Mac OS X Mavericks (10.9.3), I solved this by doing the follows:
Install libjpeg by brew (package management system)
brew install libjpeg
reinstall pillow (I use pillow instead of PIL)
pip install -I pillow
brew unlink jpeg && brew link jpeg
before installing Pillow.
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev
Install these and be sure to install PIL with pip because I compiled it from source and for some reason it didn't work
I was already using Pillow
and got the same error. Tried installing libjpeg
or libjpeg-dev
as suggested by others but was told that a (newer) version was already installed.
In the end all it took was reinstalling Pillow
:
sudo pip uninstall Pillow
sudo pip install Pillow
I'm too newbie to comment zeantsoi post ;(. So here his what I needed to do to solved on OSX on 10.9.1 the
IOError: decoder jpeg not available
1) install Xcode tools (open your terminal and execute: xcode-select --install
) - taken from this post: Can't install PIL after Mac OS X 10.9
2) install libpng and libjpeg package (combo installer) from this link: http://ethan.tira-thompson.com/Mac_OS_X_Ports.html
3) reboot (not sure it was mandatory)
4) Re-install PIL with run pip install -I PIL
(as I had initially installed PIL before having the issue)
Hope this help and don't confuse more ...
_oho
This question was posted quite a while ago and most of the answers are quite old too. So when I spent hours trying to figure this out, nothing worked, and I tried all suggestions in this post.
I was still getting the standard JPEG errors when trying to upload a JPG in my Django avatar form:
raise IOError("decoder %s not available" % decoder_name)
OSError: decoder jpeg not available
Then I checked the repository for Ubuntu 12.04 and noticed some extra packages for libjpeg
. I installed these and my problem was solved:
sudo apt-get install libjpeg62 libjpeg62-dev
Installing these removed libjpeg-dev
, libjpeg-turbo8-dev
, and libjpeg8-dev
.
Hope this helps someone in the year 2015 and beyond!
Cheers
Same problem here, JPEG support available
but still got IOError: decoder/encoder jpeg not available
, except I use Pillow and not PIL.
I tried all of the above and more, but after many hours I realized that using sudo pip install
does not work as I expected, in combination with virtualenv
. Silly me.
Using sudo
effectively launches the command in a new shell (my understanding of this may not be entirely correct) where the virtualenv is not activated, meaning that the packages will be installed in the global environment instead. (This messed things up, I think I had 2 different installations of Pillow.)
I cleaned things up, changed user to root and reinstalled in the virtualenv and now it works. Hopefully this will help someone!
For Fedora
Install pre-requisite
sudo dnf install make automake gcc gcc-c++ kernel-devel rpm-build libjpeg-devel zlib-devel python-devel
Now install Pillow
sudo pip install pillow
Note - For libjpeg and zlib we are installing libjpeg-devel and zlib-devel packages in Fedora/CentOS/Red Hat
First I had to delete the python folders in hidden folder user/appData (that was creating huge headaches), in addition to uninstalling Python. Then I installed WinPython Distribution: http://code.google.com/p/winpython/ which includes PIL
For those on Mac OS Mountain Lion, I followed the anwser of zeantsoi, but it doesn't work.
I finally ended up with the solution of this post: http://appelfreelance.com/2010/06/libjpeg-pil-snow-leopard-python2-6-_jpeg_resync_to_restart/
Now, I'm happily running my script for jpeg !
Success story sharing
pip install
things the first time, but then subsequent uninstalls and (re)installs were suspiciously quick. Anyway, the methods above did not work for me until I ranpip install --no-cache-dir pillow
. Good luck!