Skip to content

Commit 510c84a

Browse files
authored
Merge pull request #8476 from radarhere/jpeg_state
2 parents 4db5be1 + 0beb222 commit 510c84a

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

Tests/test_pickle.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,17 @@ def test_pickle_image(
7474
helper_pickle_file(tmp_path, protocol, test_file, test_mode)
7575

7676

77+
def test_pickle_jpeg() -> None:
78+
# Arrange
79+
with Image.open("Tests/images/hopper.jpg") as image:
80+
# Act: roundtrip
81+
unpickled_image = pickle.loads(pickle.dumps(image))
82+
83+
# Assert
84+
assert len(unpickled_image.layer) == 3
85+
assert unpickled_image.layers == 3
86+
87+
7788
def test_pickle_la_mode_with_palette(tmp_path: Path) -> None:
7889
# Arrange
7990
filename = str(tmp_path / "temp.pkl")

src/PIL/Image.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -754,7 +754,7 @@ def __getstate__(self) -> list[Any]:
754754

755755
def __setstate__(self, state: list[Any]) -> None:
756756
Image.__init__(self)
757-
info, mode, size, palette, data = state
757+
info, mode, size, palette, data = state[:5]
758758
self.info = info
759759
self._mode = mode
760760
self._size = size

src/PIL/JpegImagePlugin.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,13 @@ def __getattr__(self, name: str) -> Any:
395395
return getattr(self, "_" + name)
396396
raise AttributeError(name)
397397

398+
def __getstate__(self) -> list[Any]:
399+
return super().__getstate__() + [self.layers, self.layer]
400+
401+
def __setstate__(self, state: list[Any]) -> None:
402+
super().__setstate__(state)
403+
self.layers, self.layer = state[5:]
404+
398405
def load_read(self, read_bytes: int) -> bytes:
399406
"""
400407
internal: read more image data

0 commit comments

Comments
 (0)