cannot write mode RGBA as JPEG (4.2.0) #2609
What did you do?
Tried to save JPG file (any JPG file).
What did you expect to happen?
Saving without any exceptions (was working in 4.1.1 version)
What actually happened?
File /usr/lib/python3.6/site-packages/PIL/Image.py, line 1893, in save
What versions of Pillow and Python are you using?
4.2.0 (with 4.1.1 works properly) / Python 3.6
Please include code that reproduces the issue and whenever possible, an image that demonstrates the issue. Please upload images to GitHub, not to third-party file hosting sites. If necessary, add the image to a zip or tar archive.
The best reproductions are self-contained scripts with minimal dependencies. If you are using a framework such as plone, Django, or buildout, try to replicate the issue just using Pillow.
im = Image.open(file_path) im = im.convert("RGBA") im.save(hidpi_path, file_type, quality=95)
The text was updated successfully, but these errors were encountered:
JPEGs can't represent an alpha channel. It's been issuing a warning for a while, removed in this release.
@AymericHENRY Hi. While this is just reiterating what has already been said, you should have no problem saving an image in RGBA mode to PNG. To save an image in RGBA mode as JPEG means getting rid of the alpha channel, because JPEG doesn't transparency. So, if you have an image in RGBA mode, then converting it to RGB will let you save it as JPEG.
>>> from PIL import Image >>> im = Image.new("RGBA",(100,100)) >>> im.save("test.jpg") >>> Traceback (most recent call last): File "PIL/JpegImagePlugin.py", line 602, in _save KeyError: 'RGBA' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "PIL/Image.py", line 1893, in save File "PIL/JpegImagePlugin.py", line 604, in _save OSError: cannot write mode RGBA as JPEG >>> im = im.convert("RGB") >>> im.save("test.jpg") >>>
In most cases the discarding the alpha channel will give you undesirable result, because transparent pixels also have some unpredictable colors. It is much better to fill transparent pixels with certain color:
fill_color = '' # your background image = Image.open(file_path) if image.mode in ('RGBA', 'LA'): background = Image.new(image.mode[:-1], image.size, fill_color) background.paste(image, image.split()[-1]) image = background im.save(hidpi_path, file_type, quality=95)
* adding a quality option Signed-off-by: ananyajana <email@example.com> * removing the unnecessary check-ins Signed-off-by: ananyajana <firstname.lastname@example.org> * removing the unnecessary check-ins Signed-off-by: ananyajana <email@example.com> * minor changes: reframing the sentences Signed-off-by: ananyajana <firstname.lastname@example.org> * addressing review comments Signed-off-by: ananyajana <email@example.com> * addressing code review comments 2 Signed-off-by: ananyajana <firstname.lastname@example.org> * addressing code review comments 3 Signed-off-by: ananyajana <email@example.com> * addressing code review comments 4 Signed-off-by: ananyajana <firstname.lastname@example.org> * Update features * Add Python 3.6 support * Fix issue "cannot write mode RGBA as JPEG" See python-pillow/Pillow#2609 Using solution proposed by @homm to make sure alpha channel is stripped from PNGs before conversion to JPGs.
* In matplotlib saving a histogram to a JPG file used to work * Pillow deprecated the ability to save RGBA images as JPG since JPG doesn't support an alpha channel * Now saving the histograms as PNG instead to bypass the issue * Source python-pillow/Pillow#2609
… channel This was deprecated in 4.2.0 https://github.com/python-pillow/Pillow/blob/master/docs/releasenotes/4.2.0.rst#removed-deprecated-items and as we upgrade to 5.2.0, we need to take care of this case. see the discussion in python-pillow/Pillow#2609
When png images have an alpha layer, they can retain them in RGBA mode. This causes img.save(..., "JPEG") to fail with IOError("cannot write mode RGBA as JPEG"). This commit layers RGBA images on top of a black background before removing the alpha channel and converting to RGB. Example image that used to fail: https://i.redd.it/gnro5oykh1821.png Issue in Pillow: python-pillow/Pillow#2609 StackOverflow solution: http://stackoverflow.com/a/9459208/284318