Pillow/Tests/test_file_tga.py

149 lines
4.5 KiB
Python
Raw Normal View History

2018-06-15 23:01:06 +03:00
import os
from glob import glob
from itertools import product
2014-08-20 10:32:06 +04:00
from helper import unittest, PillowTestCase
from PIL import Image
2018-06-15 23:01:06 +03:00
_TGA_DIR = os.path.join("Tests", "images", "tga")
_TGA_DIR_COMMON = os.path.join(_TGA_DIR, "common")
2014-08-20 10:39:11 +04:00
class TestFileTga(PillowTestCase):
2014-08-20 10:32:06 +04:00
2018-07-02 00:50:02 +03:00
_MODES = ("L", "LA", "P", "RGB", "RGBA")
2018-06-15 23:01:06 +03:00
_ORIGINS = ("tl", "bl")
_ORIGIN_TO_ORIENTATION = {
"tl": 1,
"bl": -1
}
def test_sanity(self):
for mode in self._MODES:
png_paths = glob(
os.path.join(
_TGA_DIR_COMMON, "*x*_{}.png".format(mode.lower())))
for png_path in png_paths:
reference_im = Image.open(png_path)
self.assertEqual(reference_im.mode, mode)
path_no_ext = os.path.splitext(png_path)[0]
for origin, rle in product(self._ORIGINS, (True, False)):
tga_path = "{}_{}_{}.tga".format(
path_no_ext, origin, "rle" if rle else "raw")
original_im = Image.open(tga_path)
if rle:
self.assertEqual(
original_im.info["compression"], "tga_rle")
self.assertEqual(
original_im.info["orientation"],
self._ORIGIN_TO_ORIENTATION[origin])
if mode == "P":
self.assertEqual(
original_im.getpalette(),
reference_im.getpalette())
self.assert_image_equal(original_im, reference_im)
# Generate a new test name every time so the
# test will not fail with permission error
# on Windows.
test_file = self.tempfile("temp.tga")
original_im.save(test_file, rle=rle)
saved_im = Image.open(test_file)
if rle:
self.assertEqual(
saved_im.info["compression"],
original_im.info["compression"])
self.assertEqual(
saved_im.info["orientation"],
original_im.info["orientation"])
if mode == "P":
self.assertEqual(
saved_im.getpalette(),
original_im.getpalette())
self.assert_image_equal(saved_im, original_im)
2014-08-20 10:39:11 +04:00
def test_id_field(self):
2014-08-20 10:32:06 +04:00
# tga file with id field
test_file = "Tests/images/tga_id_field.tga"
# Act
im = Image.open(test_file)
# Assert
self.assertEqual(im.size, (100, 100))
2016-04-21 17:40:20 +03:00
def test_id_field_rle(self):
# tga file with id field
test_file = "Tests/images/rgb32rle.tga"
# Act
im = Image.open(test_file)
# Assert
self.assertEqual(im.size, (199, 199))
2015-07-03 08:03:25 +03:00
def test_save(self):
test_file = "Tests/images/tga_id_field.tga"
im = Image.open(test_file)
test_file = self.tempfile("temp.tga")
# Save
im.save(test_file)
test_im = Image.open(test_file)
self.assertEqual(test_im.size, (100, 100))
# RGBA save
im.convert("RGBA").save(test_file)
test_im = Image.open(test_file)
self.assertEqual(test_im.size, (100, 100))
2015-07-03 09:22:56 +03:00
2016-04-21 17:40:20 +03:00
def test_save_rle(self):
test_file = "Tests/images/rgb32rle.tga"
im = Image.open(test_file)
test_file = self.tempfile("temp.tga")
# Save
im.save(test_file)
test_im = Image.open(test_file)
self.assertEqual(test_im.size, (199, 199))
# RGBA save
im.convert("RGBA").save(test_file)
test_im = Image.open(test_file)
self.assertEqual(test_im.size, (199, 199))
2018-06-14 12:18:08 +03:00
def test_save_l_transparency(self):
# There are 559 transparent pixels in la.tga.
num_transparent = 559
in_file = "Tests/images/la.tga"
im = Image.open(in_file)
self.assertEqual(im.mode, "LA")
self.assertEqual(
im.getchannel("A").getcolors()[0][0], num_transparent)
test_file = self.tempfile("temp.tga")
im.save(test_file)
test_im = Image.open(test_file)
self.assertEqual(test_im.mode, "LA")
self.assertEqual(
test_im.getchannel("A").getcolors()[0][0], num_transparent)
self.assert_image_equal(im, test_im)
2016-04-21 17:40:20 +03:00
2014-08-20 10:32:06 +04:00
if __name__ == '__main__':
unittest.main()