Fixed loading rotated PCD images

This commit is contained in:
Andrew Murray 2025-08-29 07:35:18 +10:00
parent 35f23fb78c
commit 05a6010311
2 changed files with 14 additions and 2 deletions

View File

@ -6,6 +6,8 @@ import pytest
from PIL import Image from PIL import Image
from .helper import assert_image_equal
def test_load_raw() -> None: def test_load_raw() -> None:
with Image.open("Tests/images/hopper.pcd") as im: with Image.open("Tests/images/hopper.pcd") as im:
@ -30,3 +32,8 @@ def test_rotated(orientation: int) -> None:
f = BytesIO(data) f = BytesIO(data)
with Image.open(f) as im: with Image.open(f) as im:
assert im.size == (512, 768) assert im.size == (512, 768)
with Image.open("Tests/images/hopper.pcd") as expected:
assert_image_equal(
im, expected.rotate(90 if orientation == 1 else -90, expand=True)
)

View File

@ -47,12 +47,17 @@ class PcdImageFile(ImageFile.ImageFile):
self._mode = "RGB" self._mode = "RGB"
self._size = (512, 768) if orientation in (1, 3) else (768, 512) self._size = (512, 768) if orientation in (1, 3) else (768, 512)
self.tile = [ImageFile._Tile("pcd", (0, 0) + self.size, 96 * 2048)] self.tile = [ImageFile._Tile("pcd", (0, 0, 768, 512), 96 * 2048)]
def load_prepare(self) -> None:
if self._im is None and self.tile_post_rotate:
self.im = Image.core.new(self.mode, (768, 512))
ImageFile.ImageFile.load_prepare(self)
def load_end(self) -> None: def load_end(self) -> None:
if self.tile_post_rotate: if self.tile_post_rotate:
# Handle rotated PCDs # Handle rotated PCDs
self.im = self.im.rotate(self.tile_post_rotate) self.im = self.rotate(self.tile_post_rotate, expand=True).im
# #