Skip to content

Commit c22e7af

Browse files
authored
Fixed loading rotated PCD images (#9177)
2 parents c40ba22 + c6915f7 commit c22e7af

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

Tests/test_file_pcd.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
from PIL import Image
88

9+
from .helper import assert_image_equal
10+
911

1012
def test_load_raw() -> None:
1113
with Image.open("Tests/images/hopper.pcd") as im:
@@ -30,3 +32,8 @@ def test_rotated(orientation: int) -> None:
3032
f = BytesIO(data)
3133
with Image.open(f) as im:
3234
assert im.size == (512, 768)
35+
36+
with Image.open("Tests/images/hopper.pcd") as expected:
37+
assert_image_equal(
38+
im, expected.rotate(90 if orientation == 1 else 270, expand=True)
39+
)

src/PIL/PcdImagePlugin.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,21 @@ def _open(self) -> None:
4343
if orientation == 1:
4444
self.tile_post_rotate = 90
4545
elif orientation == 3:
46-
self.tile_post_rotate = -90
46+
self.tile_post_rotate = 270
4747

4848
self._mode = "RGB"
4949
self._size = (512, 768) if orientation in (1, 3) else (768, 512)
50-
self.tile = [ImageFile._Tile("pcd", (0, 0) + self.size, 96 * 2048)]
50+
self.tile = [ImageFile._Tile("pcd", (0, 0, 768, 512), 96 * 2048)]
51+
52+
def load_prepare(self) -> None:
53+
if self._im is None and self.tile_post_rotate:
54+
self.im = Image.core.new(self.mode, (768, 512))
55+
ImageFile.ImageFile.load_prepare(self)
5156

5257
def load_end(self) -> None:
5358
if self.tile_post_rotate:
5459
# Handle rotated PCDs
55-
self.im = self.im.rotate(self.tile_post_rotate)
60+
self.im = self.rotate(self.tile_post_rotate, expand=True).im
5661

5762

5863
#

0 commit comments

Comments
 (0)