mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-26 09:14:27 +03:00
Added type hint to ImageFile._save tile parameter
This commit is contained in:
parent
8737709781
commit
497080f63b
|
@ -317,7 +317,13 @@ class TestPyEncoder(CodecsTest):
|
||||||
|
|
||||||
fp = BytesIO()
|
fp = BytesIO()
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im, fp, [("MOCK", (xoff, yoff, xoff + xsize, yoff + ysize), 0, "RGB")]
|
im,
|
||||||
|
fp,
|
||||||
|
[
|
||||||
|
ImageFile._Tile(
|
||||||
|
"MOCK", (xoff, yoff, xoff + xsize, yoff + ysize), 0, "RGB"
|
||||||
|
)
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
assert MockPyEncoder.last
|
assert MockPyEncoder.last
|
||||||
|
@ -333,7 +339,7 @@ class TestPyEncoder(CodecsTest):
|
||||||
im.tile = [("MOCK", None, 32, None)]
|
im.tile = [("MOCK", None, 32, None)]
|
||||||
|
|
||||||
fp = BytesIO()
|
fp = BytesIO()
|
||||||
ImageFile._save(im, fp, [("MOCK", None, 0, "RGB")])
|
ImageFile._save(im, fp, [ImageFile._Tile("MOCK", None, 0, "RGB")])
|
||||||
|
|
||||||
assert MockPyEncoder.last
|
assert MockPyEncoder.last
|
||||||
assert MockPyEncoder.last.state.xoff == 0
|
assert MockPyEncoder.last.state.xoff == 0
|
||||||
|
@ -350,7 +356,9 @@ class TestPyEncoder(CodecsTest):
|
||||||
MockPyEncoder.last = None
|
MockPyEncoder.last = None
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im, fp, [("MOCK", (xoff, yoff, -10, yoff + ysize), 0, "RGB")]
|
im,
|
||||||
|
fp,
|
||||||
|
[ImageFile._Tile("MOCK", (xoff, yoff, -10, yoff + ysize), 0, "RGB")],
|
||||||
)
|
)
|
||||||
last: MockPyEncoder | None = MockPyEncoder.last
|
last: MockPyEncoder | None = MockPyEncoder.last
|
||||||
assert last
|
assert last
|
||||||
|
@ -358,7 +366,9 @@ class TestPyEncoder(CodecsTest):
|
||||||
|
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im, fp, [("MOCK", (xoff, yoff, xoff + xsize, -10), 0, "RGB")]
|
im,
|
||||||
|
fp,
|
||||||
|
[ImageFile._Tile("MOCK", (xoff, yoff, xoff + xsize, -10), 0, "RGB")],
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_oversize(self) -> None:
|
def test_oversize(self) -> None:
|
||||||
|
@ -371,14 +381,22 @@ class TestPyEncoder(CodecsTest):
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im,
|
im,
|
||||||
fp,
|
fp,
|
||||||
[("MOCK", (xoff, yoff, xoff + xsize + 100, yoff + ysize), 0, "RGB")],
|
[
|
||||||
|
ImageFile._Tile(
|
||||||
|
"MOCK", (xoff, yoff, xoff + xsize + 100, yoff + ysize), 0, "RGB"
|
||||||
|
)
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im,
|
im,
|
||||||
fp,
|
fp,
|
||||||
[("MOCK", (xoff, yoff, xoff + xsize, yoff + ysize + 100), 0, "RGB")],
|
[
|
||||||
|
ImageFile._Tile(
|
||||||
|
"MOCK", (xoff, yoff, xoff + xsize, yoff + ysize + 100), 0, "RGB"
|
||||||
|
)
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_encode(self) -> None:
|
def test_encode(self) -> None:
|
||||||
|
|
|
@ -477,7 +477,7 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
fp.write(struct.pack("<i", 5))
|
fp.write(struct.pack("<i", 5))
|
||||||
fp.write(struct.pack("<i", 0))
|
fp.write(struct.pack("<i", 0))
|
||||||
|
|
||||||
ImageFile._save(im, fp, [("BLP", (0, 0) + im.size, 0, im.mode)])
|
ImageFile._save(im, fp, [ImageFile._Tile("BLP", (0, 0) + im.size, 0, im.mode)])
|
||||||
|
|
||||||
|
|
||||||
Image.register_open(BlpImageFile.format, BlpImageFile, _accept)
|
Image.register_open(BlpImageFile.format, BlpImageFile, _accept)
|
||||||
|
|
|
@ -482,7 +482,9 @@ def _save(
|
||||||
if palette:
|
if palette:
|
||||||
fp.write(palette)
|
fp.write(palette)
|
||||||
|
|
||||||
ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, stride, -1))])
|
ImageFile._save(
|
||||||
|
im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, stride, -1))]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -434,7 +434,7 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes, eps: int = 1) -
|
||||||
if hasattr(fp, "flush"):
|
if hasattr(fp, "flush"):
|
||||||
fp.flush()
|
fp.flush()
|
||||||
|
|
||||||
ImageFile._save(im, fp, [("eps", (0, 0) + im.size, 0, None)])
|
ImageFile._save(im, fp, [ImageFile._Tile("eps", (0, 0) + im.size, 0, None)])
|
||||||
|
|
||||||
fp.write(b"\n%%%%EndBinary\n")
|
fp.write(b"\n%%%%EndBinary\n")
|
||||||
fp.write(b"grestore end\n")
|
fp.write(b"grestore end\n")
|
||||||
|
|
|
@ -591,7 +591,9 @@ def _write_single_frame(
|
||||||
_write_local_header(fp, im, (0, 0), flags)
|
_write_local_header(fp, im, (0, 0), flags)
|
||||||
|
|
||||||
im_out.encoderconfig = (8, get_interlace(im))
|
im_out.encoderconfig = (8, get_interlace(im))
|
||||||
ImageFile._save(im_out, fp, [("gif", (0, 0) + im.size, 0, RAWMODE[im_out.mode])])
|
ImageFile._save(
|
||||||
|
im_out, fp, [ImageFile._Tile("gif", (0, 0) + im.size, 0, RAWMODE[im_out.mode])]
|
||||||
|
)
|
||||||
|
|
||||||
fp.write(b"\0") # end of image data
|
fp.write(b"\0") # end of image data
|
||||||
|
|
||||||
|
@ -1054,7 +1056,9 @@ def _write_frame_data(
|
||||||
_write_local_header(fp, im_frame, offset, 0)
|
_write_local_header(fp, im_frame, offset, 0)
|
||||||
|
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im_frame, fp, [("gif", (0, 0) + im_frame.size, 0, RAWMODE[im_frame.mode])]
|
im_frame,
|
||||||
|
fp,
|
||||||
|
[ImageFile._Tile("gif", (0, 0) + im_frame.size, 0, RAWMODE[im_frame.mode])],
|
||||||
)
|
)
|
||||||
|
|
||||||
fp.write(b"\0") # end of image data
|
fp.write(b"\0") # end of image data
|
||||||
|
|
|
@ -97,7 +97,9 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
if bits != 32:
|
if bits != 32:
|
||||||
and_mask = Image.new("1", size)
|
and_mask = Image.new("1", size)
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
and_mask, image_io, [("raw", (0, 0) + size, 0, ("1", 0, -1))]
|
and_mask,
|
||||||
|
image_io,
|
||||||
|
[ImageFile._Tile("raw", (0, 0) + size, 0, ("1", 0, -1))],
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
frame.save(image_io, "png")
|
frame.save(image_io, "png")
|
||||||
|
|
|
@ -360,7 +360,9 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
palette += im_palette[colors * i : colors * (i + 1)]
|
palette += im_palette[colors * i : colors * (i + 1)]
|
||||||
palette += b"\x00" * (256 - colors)
|
palette += b"\x00" * (256 - colors)
|
||||||
fp.write(palette) # 768 bytes
|
fp.write(palette) # 768 bytes
|
||||||
ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, -1))])
|
ImageFile._save(
|
||||||
|
im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, -1))]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -93,7 +93,7 @@ def _tilesort(t: _Tile) -> int:
|
||||||
|
|
||||||
class _Tile(NamedTuple):
|
class _Tile(NamedTuple):
|
||||||
codec_name: str
|
codec_name: str
|
||||||
extents: tuple[int, int, int, int]
|
extents: tuple[int, int, int, int] | None
|
||||||
offset: int
|
offset: int
|
||||||
args: tuple[Any, ...] | str | None
|
args: tuple[Any, ...] | str | None
|
||||||
|
|
||||||
|
@ -522,7 +522,7 @@ class Parser:
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
def _save(im: Image.Image, fp: IO[bytes], tile, bufsize: int = 0) -> None:
|
def _save(im: Image.Image, fp: IO[bytes], tile: list[_Tile], bufsize: int = 0) -> None:
|
||||||
"""Helper to save image based on tile list
|
"""Helper to save image based on tile list
|
||||||
|
|
||||||
:param im: Image object.
|
:param im: Image object.
|
||||||
|
|
|
@ -419,7 +419,7 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
plt,
|
plt,
|
||||||
)
|
)
|
||||||
|
|
||||||
ImageFile._save(im, fp, [("jpeg2k", (0, 0) + im.size, 0, kind)])
|
ImageFile._save(im, fp, [ImageFile._Tile("jpeg2k", (0, 0) + im.size, 0, kind)])
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
|
@ -826,7 +826,9 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
# Ensure that our buffer is big enough. Same with the icc_profile block.
|
# Ensure that our buffer is big enough. Same with the icc_profile block.
|
||||||
bufsize = max(bufsize, len(exif) + 5, len(extra) + 1)
|
bufsize = max(bufsize, len(exif) + 5, len(extra) + 1)
|
||||||
|
|
||||||
ImageFile._save(im, fp, [("jpeg", (0, 0) + im.size, 0, rawmode)], bufsize)
|
ImageFile._save(
|
||||||
|
im, fp, [ImageFile._Tile("jpeg", (0, 0) + im.size, 0, rawmode)], bufsize
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _save_cjpeg(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
def _save_cjpeg(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
|
|
|
@ -188,7 +188,7 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
fp.write(o16(h))
|
fp.write(o16(h))
|
||||||
|
|
||||||
# image body
|
# image body
|
||||||
ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 32, ("1", 0, 1))])
|
ImageFile._save(im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 32, ("1", 0, 1))])
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -213,7 +213,9 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
# now convert data to raw form
|
# now convert data to raw form
|
||||||
ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, rowbytes, 1))])
|
ImageFile._save(
|
||||||
|
im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, rowbytes, 1))]
|
||||||
|
)
|
||||||
|
|
||||||
if hasattr(fp, "flush"):
|
if hasattr(fp, "flush"):
|
||||||
fp.flush()
|
fp.flush()
|
||||||
|
|
|
@ -198,7 +198,9 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
|
|
||||||
assert fp.tell() == 128
|
assert fp.tell() == 128
|
||||||
|
|
||||||
ImageFile._save(im, fp, [("pcx", (0, 0) + im.size, 0, (rawmode, bits * planes))])
|
ImageFile._save(
|
||||||
|
im, fp, [ImageFile._Tile("pcx", (0, 0) + im.size, 0, (rawmode, bits * planes))]
|
||||||
|
)
|
||||||
|
|
||||||
if im.mode == "P":
|
if im.mode == "P":
|
||||||
# colour palette
|
# colour palette
|
||||||
|
|
|
@ -138,7 +138,7 @@ def _write_image(
|
||||||
op = io.BytesIO()
|
op = io.BytesIO()
|
||||||
|
|
||||||
if decode_filter == "ASCIIHexDecode":
|
if decode_filter == "ASCIIHexDecode":
|
||||||
ImageFile._save(im, op, [("hex", (0, 0) + im.size, 0, im.mode)])
|
ImageFile._save(im, op, [ImageFile._Tile("hex", (0, 0) + im.size, 0, im.mode)])
|
||||||
elif decode_filter == "CCITTFaxDecode":
|
elif decode_filter == "CCITTFaxDecode":
|
||||||
im.save(
|
im.save(
|
||||||
op,
|
op,
|
||||||
|
|
|
@ -1226,7 +1226,7 @@ def _write_multiple_frames(
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im,
|
im,
|
||||||
cast(IO[bytes], _idat(fp, chunk)),
|
cast(IO[bytes], _idat(fp, chunk)),
|
||||||
[("zip", (0, 0) + im.size, 0, rawmode)],
|
[ImageFile._Tile("zip", (0, 0) + im.size, 0, rawmode)],
|
||||||
)
|
)
|
||||||
|
|
||||||
seq_num = 0
|
seq_num = 0
|
||||||
|
@ -1263,14 +1263,14 @@ def _write_multiple_frames(
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im_frame,
|
im_frame,
|
||||||
cast(IO[bytes], _idat(fp, chunk)),
|
cast(IO[bytes], _idat(fp, chunk)),
|
||||||
[("zip", (0, 0) + im_frame.size, 0, rawmode)],
|
[ImageFile._Tile("zip", (0, 0) + im_frame.size, 0, rawmode)],
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
fdat_chunks = _fdat(fp, chunk, seq_num)
|
fdat_chunks = _fdat(fp, chunk, seq_num)
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im_frame,
|
im_frame,
|
||||||
cast(IO[bytes], fdat_chunks),
|
cast(IO[bytes], fdat_chunks),
|
||||||
[("zip", (0, 0) + im_frame.size, 0, rawmode)],
|
[ImageFile._Tile("zip", (0, 0) + im_frame.size, 0, rawmode)],
|
||||||
)
|
)
|
||||||
seq_num = fdat_chunks.seq_num
|
seq_num = fdat_chunks.seq_num
|
||||||
return None
|
return None
|
||||||
|
@ -1471,7 +1471,7 @@ def _save(
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
single_im,
|
single_im,
|
||||||
cast(IO[bytes], _idat(fp, chunk)),
|
cast(IO[bytes], _idat(fp, chunk)),
|
||||||
[("zip", (0, 0) + single_im.size, 0, rawmode)],
|
[ImageFile._Tile("zip", (0, 0) + single_im.size, 0, rawmode)],
|
||||||
)
|
)
|
||||||
|
|
||||||
if info:
|
if info:
|
||||||
|
|
|
@ -353,7 +353,9 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
elif head == b"Pf":
|
elif head == b"Pf":
|
||||||
fp.write(b"-1.0\n")
|
fp.write(b"-1.0\n")
|
||||||
row_order = -1 if im.mode == "F" else 1
|
row_order = -1 if im.mode == "F" else 1
|
||||||
ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, row_order))])
|
ImageFile._save(
|
||||||
|
im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, row_order))]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -278,7 +278,9 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
fp.writelines(hdr)
|
fp.writelines(hdr)
|
||||||
|
|
||||||
rawmode = "F;32NF" # 32-bit native floating point
|
rawmode = "F;32NF" # 32-bit native floating point
|
||||||
ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, 1))])
|
ImageFile._save(
|
||||||
|
im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, 1))]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _save_spider(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
def _save_spider(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
|
|
|
@ -238,11 +238,15 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
|
|
||||||
if rle:
|
if rle:
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im, fp, [("tga_rle", (0, 0) + im.size, 0, (rawmode, orientation))]
|
im,
|
||||||
|
fp,
|
||||||
|
[ImageFile._Tile("tga_rle", (0, 0) + im.size, 0, (rawmode, orientation))],
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
ImageFile._save(
|
ImageFile._save(
|
||||||
im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, orientation))]
|
im,
|
||||||
|
fp,
|
||||||
|
[ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, orientation))],
|
||||||
)
|
)
|
||||||
|
|
||||||
# write targa version 2 footer
|
# write targa version 2 footer
|
||||||
|
|
|
@ -85,7 +85,7 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||||
|
|
||||||
fp.write(b"static char im_bits[] = {\n")
|
fp.write(b"static char im_bits[] = {\n")
|
||||||
|
|
||||||
ImageFile._save(im, fp, [("xbm", (0, 0) + im.size, 0, None)])
|
ImageFile._save(im, fp, [ImageFile._Tile("xbm", (0, 0) + im.size, 0, None)])
|
||||||
|
|
||||||
fp.write(b"};\n")
|
fp.write(b"};\n")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user