mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47:47 +03:00 
			
		
		
		
	Merge pull request #7654 from radarhere/rowsperstrip
This commit is contained in:
		
						commit
						5df7235d90
					
				| 
						 | 
					@ -612,6 +612,14 @@ class TestFileTiff:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            assert_image_equal_tofile(im, tmpfile)
 | 
					            assert_image_equal_tofile(im, tmpfile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_rowsperstrip(self, tmp_path):
 | 
				
			||||||
 | 
					        outfile = str(tmp_path / "temp.tif")
 | 
				
			||||||
 | 
					        im = hopper()
 | 
				
			||||||
 | 
					        im.save(outfile, tiffinfo={278: 256})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        with Image.open(outfile) as im:
 | 
				
			||||||
 | 
					            assert im.tag_v2[278] == 256
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_strip_raw(self):
 | 
					    def test_strip_raw(self):
 | 
				
			||||||
        infile = "Tests/images/tiff_strip_raw.tif"
 | 
					        infile = "Tests/images/tiff_strip_raw.tif"
 | 
				
			||||||
        with Image.open(infile) as im:
 | 
					        with Image.open(infile) as im:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -123,6 +123,7 @@ def test_write_metadata(tmp_path):
 | 
				
			||||||
    """Test metadata writing through the python code"""
 | 
					    """Test metadata writing through the python code"""
 | 
				
			||||||
    with Image.open("Tests/images/hopper.tif") as img:
 | 
					    with Image.open("Tests/images/hopper.tif") as img:
 | 
				
			||||||
        f = str(tmp_path / "temp.tiff")
 | 
					        f = str(tmp_path / "temp.tiff")
 | 
				
			||||||
 | 
					        del img.tag[278]
 | 
				
			||||||
        img.save(f, tiffinfo=img.tag)
 | 
					        img.save(f, tiffinfo=img.tag)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        original = img.tag_v2.named()
 | 
					        original = img.tag_v2.named()
 | 
				
			||||||
| 
						 | 
					@ -159,6 +160,7 @@ def test_change_stripbytecounts_tag_type(tmp_path):
 | 
				
			||||||
    out = str(tmp_path / "temp.tiff")
 | 
					    out = str(tmp_path / "temp.tiff")
 | 
				
			||||||
    with Image.open("Tests/images/hopper.tif") as im:
 | 
					    with Image.open("Tests/images/hopper.tif") as im:
 | 
				
			||||||
        info = im.tag_v2
 | 
					        info = im.tag_v2
 | 
				
			||||||
 | 
					        del info[278]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Resize the image so that STRIPBYTECOUNTS will be larger than a SHORT
 | 
					        # Resize the image so that STRIPBYTECOUNTS will be larger than a SHORT
 | 
				
			||||||
        im = im.resize((500, 500))
 | 
					        im = im.resize((500, 500))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1705,20 +1705,23 @@ def _save(im, fp, filename):
 | 
				
			||||||
        ifd[COLORMAP] = colormap
 | 
					        ifd[COLORMAP] = colormap
 | 
				
			||||||
    # data orientation
 | 
					    # data orientation
 | 
				
			||||||
    stride = len(bits) * ((im.size[0] * bits[0] + 7) // 8)
 | 
					    stride = len(bits) * ((im.size[0] * bits[0] + 7) // 8)
 | 
				
			||||||
    # aim for given strip size (64 KB by default) when using libtiff writer
 | 
					    if ROWSPERSTRIP not in ifd:
 | 
				
			||||||
    if libtiff:
 | 
					        # aim for given strip size (64 KB by default) when using libtiff writer
 | 
				
			||||||
        im_strip_size = encoderinfo.get("strip_size", STRIP_SIZE)
 | 
					        if libtiff:
 | 
				
			||||||
        rows_per_strip = 1 if stride == 0 else min(im_strip_size // stride, im.size[1])
 | 
					            im_strip_size = encoderinfo.get("strip_size", STRIP_SIZE)
 | 
				
			||||||
        # JPEG encoder expects multiple of 8 rows
 | 
					            rows_per_strip = (
 | 
				
			||||||
        if compression == "jpeg":
 | 
					                1 if stride == 0 else min(im_strip_size // stride, im.size[1])
 | 
				
			||||||
            rows_per_strip = min(((rows_per_strip + 7) // 8) * 8, im.size[1])
 | 
					            )
 | 
				
			||||||
    else:
 | 
					            # JPEG encoder expects multiple of 8 rows
 | 
				
			||||||
        rows_per_strip = im.size[1]
 | 
					            if compression == "jpeg":
 | 
				
			||||||
    if rows_per_strip == 0:
 | 
					                rows_per_strip = min(((rows_per_strip + 7) // 8) * 8, im.size[1])
 | 
				
			||||||
        rows_per_strip = 1
 | 
					        else:
 | 
				
			||||||
    strip_byte_counts = 1 if stride == 0 else stride * rows_per_strip
 | 
					            rows_per_strip = im.size[1]
 | 
				
			||||||
    strips_per_image = (im.size[1] + rows_per_strip - 1) // rows_per_strip
 | 
					        if rows_per_strip == 0:
 | 
				
			||||||
    ifd[ROWSPERSTRIP] = rows_per_strip
 | 
					            rows_per_strip = 1
 | 
				
			||||||
 | 
					        ifd[ROWSPERSTRIP] = rows_per_strip
 | 
				
			||||||
 | 
					    strip_byte_counts = 1 if stride == 0 else stride * ifd[ROWSPERSTRIP]
 | 
				
			||||||
 | 
					    strips_per_image = (im.size[1] + ifd[ROWSPERSTRIP] - 1) // ifd[ROWSPERSTRIP]
 | 
				
			||||||
    if strip_byte_counts >= 2**16:
 | 
					    if strip_byte_counts >= 2**16:
 | 
				
			||||||
        ifd.tagtype[STRIPBYTECOUNTS] = TiffTags.LONG
 | 
					        ifd.tagtype[STRIPBYTECOUNTS] = TiffTags.LONG
 | 
				
			||||||
    ifd[STRIPBYTECOUNTS] = (strip_byte_counts,) * (strips_per_image - 1) + (
 | 
					    ifd[STRIPBYTECOUNTS] = (strip_byte_counts,) * (strips_per_image - 1) + (
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user