mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-08-02 19:40:10 +03:00
In Image.Image.seek(), clear core image if mode or size has changed
This commit is contained in:
parent
949079bf36
commit
e8ef3009e3
|
@ -428,3 +428,32 @@ class TestPyEncoder(CodecsTest):
|
|||
def test_zero_height(self) -> None:
|
||||
with pytest.raises(UnidentifiedImageError):
|
||||
Image.open("Tests/images/zero_height.j2k")
|
||||
|
||||
def test_load_prepare(self):
|
||||
class TestImageFile(ImageFile.ImageFile):
|
||||
def _open(self) -> None:
|
||||
self._mode = "1"
|
||||
self._size = (1, 1)
|
||||
self._frame = 0
|
||||
|
||||
def seek(self, frame: int) -> None:
|
||||
self._mode = "L"
|
||||
self._size = (2, 2)
|
||||
self._frame = frame
|
||||
super().seek(frame)
|
||||
|
||||
def tell(self) -> int:
|
||||
return self._frame
|
||||
|
||||
fp = BytesIO()
|
||||
im = TestImageFile(fp)
|
||||
im.load_prepare()
|
||||
assert im._im is not None
|
||||
|
||||
im.seek(1)
|
||||
assert im._im is None
|
||||
|
||||
im.load_prepare()
|
||||
assert im._im is not None
|
||||
assert im._im.mode == im.mode
|
||||
assert im._im.size == im.size
|
||||
|
|
|
@ -2633,10 +2633,16 @@ class Image:
|
|||
"""
|
||||
|
||||
# overridden by file handlers
|
||||
if frame != 0:
|
||||
if frame != self.tell():
|
||||
# The file handler likely did not override this method
|
||||
msg = "no more images in file"
|
||||
raise EOFError(msg)
|
||||
|
||||
if self._im is not None and (
|
||||
self.im.size != self.size or self.im.mode != self.mode
|
||||
):
|
||||
self._im = None
|
||||
|
||||
def show(self, title: str | None = None) -> None:
|
||||
"""
|
||||
Displays this image. This method is mainly intended for debugging purposes.
|
||||
|
|
Loading…
Reference in New Issue
Block a user