Better tests, fixes for leaking RGB->P transparency

This commit is contained in:
wiredfool 2014-03-26 00:01:10 -07:00
parent 29bb882cef
commit 8adbaf8098
2 changed files with 23 additions and 5 deletions

View File

@ -809,7 +809,14 @@ class Image:
#crash fail if we leave a bytes transparency in an rgb/l mode. #crash fail if we leave a bytes transparency in an rgb/l mode.
del(new.info['transparency']) del(new.info['transparency'])
if trns is not None: if trns is not None:
new_im.info['transparency'] = trns if new_im.mode == 'P':
try:
new_im.info['transparency'] = new_im.palette.getcolor(trns)
except:
del(new_im.info['transparency'])
warnings.warn("Couldn't allocate palette entry for transparency")
else:
new_im.info['transparency'] = trns
return new_im return new_im
def quantize(self, colors=256, method=None, kmeans=0, palette=None): def quantize(self, colors=256, method=None, kmeans=0, palette=None):

View File

@ -84,6 +84,11 @@ def test_trns_l():
assert_true('transparency' in p.info) assert_true('transparency' in p.info)
assert_no_exception(lambda: p.save(f)) assert_no_exception(lambda: p.save(f))
p = im.convert('P', palette = Image.ADAPTIVE)
assert_false('transparency' in p.info)
assert_no_exception(lambda: p.save(f))
def test_trns_RGB(): def test_trns_RGB():
im = lena('RGB') im = lena('RGB')
im.info['transparency'] = im.getpixel((0,0)) im.info['transparency'] = im.getpixel((0,0))
@ -97,3 +102,9 @@ def test_trns_RGB():
p = im.convert('P') p = im.convert('P')
assert_true('transparency' in p.info) assert_true('transparency' in p.info)
assert_no_exception(lambda: p.save(f)) assert_no_exception(lambda: p.save(f))
p = im.convert('P', palette = Image.ADAPTIVE)
assert_false('transparency' in p.info)
assert_no_exception(lambda: p.save(f))