Merge pull request #8859 from radarhere/filename

Include filename in ImageFile state
This commit is contained in:
Hugo van Kemenade 2025-04-02 15:51:49 +03:00 committed by GitHub
commit 92eb58ef15
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 9 additions and 2 deletions

View File

@ -81,6 +81,7 @@ def test_pickle_jpeg() -> None:
unpickled_image = pickle.loads(pickle.dumps(image))
# Assert
assert unpickled_image.filename == "Tests/images/hopper.jpg"
assert len(unpickled_image.layer) == 3
assert unpickled_image.layers == 3

View File

@ -2543,7 +2543,9 @@ class Image:
from . import ImageFile
# may mutate self!
if isinstance(self, ImageFile.ImageFile) and filename == self.filename:
if isinstance(self, ImageFile.ImageFile) and os.path.abspath(
filename
) == os.path.abspath(self.filename):
self._ensure_mutable()
else:
self.load()

View File

@ -252,8 +252,12 @@ class ImageFile(Image.Image):
return Image.MIME.get(self.format.upper())
return None
def __getstate__(self) -> list[Any]:
return super().__getstate__() + [self.filename]
def __setstate__(self, state: list[Any]) -> None:
self.tile = []
self.filename = state[5]
super().__setstate__(state)
def verify(self) -> None:

View File

@ -403,8 +403,8 @@ class JpegImageFile(ImageFile.ImageFile):
return super().__getstate__() + [self.layers, self.layer]
def __setstate__(self, state: list[Any]) -> None:
self.layers, self.layer = state[6:]
super().__setstate__(state)
self.layers, self.layer = state[5:]
def load_read(self, read_bytes: int) -> bytes:
"""