Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions Tests/test_file_tga.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,24 @@ def test_palette_depth_16(tmp_path: Path) -> None:
assert_image_equal_tofile(reloaded.convert("RGBA"), "Tests/images/p_16.png")


def test_palette_depth_32(tmp_path: Path) -> None:
im = Image.frombytes("L", (1, 2), bytes((0, 1)))
data = [255, 0, 0, 255, 0, 0, 255, 0]
im.putpalette(data, "RGBA")

out = tmp_path / "temp.tga"
im.save(out)

with Image.open(out) as reloaded:
assert reloaded.palette is not None
assert reloaded.palette.mode == "RGBA"
assert reloaded.getpalette(None) == data

reloaded_rgba = reloaded.convert("RGBA")
assert reloaded_rgba.getpixel((0, 0)) == (255, 0, 0, 255)
assert reloaded_rgba.getpixel((0, 1)) == (0, 0, 255, 0)


def test_rgba_16() -> None:
with Image.open("Tests/images/rgba16.tga") as im:
assert im.mode == "RGBA"
Expand Down
10 changes: 8 additions & 2 deletions src/PIL/TgaImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ def _open(self) -> None:
self.palette = ImagePalette.raw(
"BGRA", bytes(4 * start) + self.fp.read(4 * size)
)
self.palette.mode = "RGBA"
else:
msg = "unknown TGA map depth"
raise SyntaxError(msg)
Expand Down Expand Up @@ -224,8 +225,13 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
warnings.warn("id_section has been trimmed to 255 characters")

if colormaptype:
palette = im.im.getpalette("RGB", "BGR")
colormaplength, colormapentry = len(palette) // 3, 24
assert im.palette is not None
if im.palette.mode == "RGBA":
palette = im.im.getpalette("RGBA", "BGRA")
colormaplength, colormapentry = len(palette) // 4, 32
else:
palette = im.im.getpalette("RGB", "BGR")
colormaplength, colormapentry = len(palette) // 3, 24
else:
colormaplength, colormapentry = 0, 0

Expand Down
Loading