diff --git a/CHANGES.rst b/CHANGES.rst index 8c28bc415..abdf73b33 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.4.0 (unreleased) ------------------ +- Fixed saving mode P image as a PNG with transparency = palette color 0 + [d-schmidt] + - Improve heuristic used when saving progressive and optimized JPEGs with high quality values [e98cuenc] diff --git a/PIL/PngImagePlugin.py b/PIL/PngImagePlugin.py index a6038d9f2..18abf27d3 100644 --- a/PIL/PngImagePlugin.py +++ b/PIL/PngImagePlugin.py @@ -561,7 +561,7 @@ def _save(im, fp, filename, chunk=putchunk, check=0): transparency = im.encoderinfo.get('transparency',im.info.get('transparency', None)) - if transparency: + if transparency or transparency == 0: if im.mode == "P": # limit to actual palette size alpha_bytes = 2**bits diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py index e8d2a1208..c17829194 100644 --- a/Tests/test_file_png.py +++ b/Tests/test_file_png.py @@ -251,6 +251,20 @@ def test_trns_rgb(): im = roundtrip(im, transparency=(0, 1, 2)) assert_equal(im.info["transparency"], (0, 1, 2)) +def test_trns_p(): + # Check writing a transparency of 0, issue #528 + im = lena('P') + im.info['transparency']=0 + + f = tempfile("temp.png") + im.save(f) + + im2 = Image.open(f) + assert_true('transparency' in im2.info) + + assert_image_equal(im2.convert('RGBA'), im.convert('RGBA')) + + def test_save_icc_profile_none(): # check saving files with an ICC profile set to None (omit profile) in_file = "Tests/images/icc_profile_none.png"