mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47:47 +03:00 
			
		
		
		
	improve simple palette detection for PNG
- reverts change #1239 which could remove transparency from valid images (see test_save_p_transparent_black test case) - improves simple palette detection to handle images from #1238
This commit is contained in:
		
							parent
							
								
									0f8d66bc96
								
							
						
					
					
						commit
						c773688f37
					
				| 
						 | 
				
			
			@ -74,8 +74,7 @@ _MODES = {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
_simple_palette = re.compile(b'^\xff+\x00\xff*$')
 | 
			
		||||
_null_palette = re.compile(b'^\x00*$')
 | 
			
		||||
_simple_palette = re.compile(b'^\xff*\x00\xff*$')
 | 
			
		||||
 | 
			
		||||
# Maximum decompressed size for a iTXt or zTXt chunk.
 | 
			
		||||
# Eliminates decompression bombs where compressed chunks can expand 1000x
 | 
			
		||||
| 
						 | 
				
			
			@ -359,12 +358,14 @@ class PngStream(ChunkStream):
 | 
			
		|||
        s = ImageFile._safe_read(self.fp, length)
 | 
			
		||||
        if self.im_mode == "P":
 | 
			
		||||
            if _simple_palette.match(s):
 | 
			
		||||
                # tRNS contains only one full-transparent entry,
 | 
			
		||||
                # other entries are full opaque
 | 
			
		||||
                i = s.find(b"\0")
 | 
			
		||||
                if i >= 0:
 | 
			
		||||
                    self.im_info["transparency"] = i
 | 
			
		||||
            elif _null_palette.match(s):
 | 
			
		||||
                self.im_info["transparency"] = 0
 | 
			
		||||
            else:
 | 
			
		||||
                # otherwise, we have a byte string with one alpha value
 | 
			
		||||
                # for each palette entry
 | 
			
		||||
                self.im_info["transparency"] = s
 | 
			
		||||
        elif self.im_mode == "L":
 | 
			
		||||
            self.im_info["transparency"] = i16(s)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user