mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-12 18:26:17 +03:00
Merge pull request #1231 from radarhere/image_palette
Copy image when saving in GifImagePlugin
This commit is contained in:
commit
30631902d6
|
@ -290,7 +290,7 @@ def _save(im, fp, filename):
|
||||||
pass # write uncompressed file
|
pass # write uncompressed file
|
||||||
|
|
||||||
if im.mode in RAWMODE:
|
if im.mode in RAWMODE:
|
||||||
im_out = im
|
im_out = im.copy()
|
||||||
else:
|
else:
|
||||||
# convert on the fly (EXPERIMENTAL -- I'm not sure PIL
|
# convert on the fly (EXPERIMENTAL -- I'm not sure PIL
|
||||||
# should automatically convert images on save...)
|
# should automatically convert images on save...)
|
||||||
|
|
|
@ -509,7 +509,8 @@ class Image(object):
|
||||||
new.im = im
|
new.im = im
|
||||||
new.mode = im.mode
|
new.mode = im.mode
|
||||||
new.size = im.size
|
new.size = im.size
|
||||||
new.palette = self.palette
|
if self.palette:
|
||||||
|
new.palette = self.palette.copy()
|
||||||
if im.mode == "P" and not new.palette:
|
if im.mode == "P" and not new.palette:
|
||||||
from PIL import ImagePalette
|
from PIL import ImagePalette
|
||||||
new.palette = ImagePalette.ImagePalette()
|
new.palette = ImagePalette.ImagePalette()
|
||||||
|
|
|
@ -34,6 +34,18 @@ class ImagePalette(object):
|
||||||
(size != 0 and size != len(self.palette))):
|
(size != 0 and size != len(self.palette))):
|
||||||
raise ValueError("wrong palette size")
|
raise ValueError("wrong palette size")
|
||||||
|
|
||||||
|
def copy(self):
|
||||||
|
new = ImagePalette()
|
||||||
|
|
||||||
|
new.mode = self.mode
|
||||||
|
new.rawmode = self.rawmode
|
||||||
|
if self.palette is not None:
|
||||||
|
new.palette = self.palette[:]
|
||||||
|
new.colors = self.colors.copy()
|
||||||
|
new.dirty = self.dirty
|
||||||
|
|
||||||
|
return new
|
||||||
|
|
||||||
def getdata(self):
|
def getdata(self):
|
||||||
"""
|
"""
|
||||||
Get palette contents in format suitable # for the low-level
|
Get palette contents in format suitable # for the low-level
|
||||||
|
|
|
@ -92,20 +92,20 @@ class TestFileGif(PillowTestCase):
|
||||||
|
|
||||||
def roundtrip(im, *args, **kwargs):
|
def roundtrip(im, *args, **kwargs):
|
||||||
out = self.tempfile('temp.gif')
|
out = self.tempfile('temp.gif')
|
||||||
im.save(out, *args, **kwargs)
|
im.copy().save(out, *args, **kwargs)
|
||||||
reloaded = Image.open(out)
|
reloaded = Image.open(out)
|
||||||
|
|
||||||
return [im, reloaded]
|
return reloaded
|
||||||
|
|
||||||
orig = "Tests/images/test.colors.gif"
|
orig = "Tests/images/test.colors.gif"
|
||||||
im = Image.open(orig)
|
im = Image.open(orig)
|
||||||
|
|
||||||
self.assert_image_equal(*roundtrip(im))
|
self.assert_image_similar(im, roundtrip(im), 1)
|
||||||
self.assert_image_equal(*roundtrip(im, optimize=True))
|
self.assert_image_similar(im, roundtrip(im, optimize=True), 1)
|
||||||
|
|
||||||
im = im.convert("RGB")
|
im = im.convert("RGB")
|
||||||
# check automatic P conversion
|
# check automatic P conversion
|
||||||
reloaded = roundtrip(im)[1].convert('RGB')
|
reloaded = roundtrip(im).convert('RGB')
|
||||||
self.assert_image_equal(im, reloaded)
|
self.assert_image_equal(im, reloaded)
|
||||||
|
|
||||||
@unittest.skipUnless(netpbm_available(), "netpbm not available")
|
@unittest.skipUnless(netpbm_available(), "netpbm not available")
|
||||||
|
|
|
@ -26,7 +26,7 @@ class TestImageFile(PillowTestCase):
|
||||||
|
|
||||||
test_file = BytesIO()
|
test_file = BytesIO()
|
||||||
|
|
||||||
im.save(test_file, format)
|
im.copy().save(test_file, format)
|
||||||
|
|
||||||
data = test_file.getvalue()
|
data = test_file.getvalue()
|
||||||
|
|
||||||
|
@ -37,7 +37,8 @@ class TestImageFile(PillowTestCase):
|
||||||
return im, imOut
|
return im, imOut
|
||||||
|
|
||||||
self.assert_image_equal(*roundtrip("BMP"))
|
self.assert_image_equal(*roundtrip("BMP"))
|
||||||
self.assert_image_equal(*roundtrip("GIF"))
|
im1, im2 = roundtrip("GIF")
|
||||||
|
self.assert_image_similar(im1.convert('P'), im2, 1)
|
||||||
self.assert_image_equal(*roundtrip("IM"))
|
self.assert_image_equal(*roundtrip("IM"))
|
||||||
self.assert_image_equal(*roundtrip("MSP"))
|
self.assert_image_equal(*roundtrip("MSP"))
|
||||||
if "zip_encoder" in codecs:
|
if "zip_encoder" in codecs:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user