mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 17:36:18 +03:00
d50445ff30
Similar to the recent adoption of Black. isort is a Python utility to sort imports alphabetically and automatically separate into sections. By using isort, contributors can quickly and automatically conform to the projects style without thinking. Just let the tool do it. Uses the configuration recommended by the Black to avoid conflicts of style. Rewrite TestImageQt.test_deprecated to no rely on import order.
118 lines
3.4 KiB
Python
118 lines
3.4 KiB
Python
from PIL import Image
|
|
|
|
from .helper import PillowTestCase, hopper, unittest
|
|
|
|
try:
|
|
from PIL import _webp
|
|
except ImportError:
|
|
_webp = None
|
|
|
|
|
|
@unittest.skipIf(_webp is None, "WebP support not installed")
|
|
class TestFileWebpAlpha(PillowTestCase):
|
|
def setUp(self):
|
|
if _webp.WebPDecoderBuggyAlpha(self):
|
|
self.skipTest(
|
|
"Buggy early version of WebP installed, not testing transparency"
|
|
)
|
|
|
|
def test_read_rgba(self):
|
|
"""
|
|
Can we read an RGBA mode file without error?
|
|
Does it have the bits we expect?
|
|
"""
|
|
|
|
# Generated with `cwebp transparent.png -o transparent.webp`
|
|
file_path = "Tests/images/transparent.webp"
|
|
image = Image.open(file_path)
|
|
|
|
self.assertEqual(image.mode, "RGBA")
|
|
self.assertEqual(image.size, (200, 150))
|
|
self.assertEqual(image.format, "WEBP")
|
|
image.load()
|
|
image.getdata()
|
|
|
|
image.tobytes()
|
|
|
|
target = Image.open("Tests/images/transparent.png")
|
|
self.assert_image_similar(image, target, 20.0)
|
|
|
|
def test_write_lossless_rgb(self):
|
|
"""
|
|
Can we write an RGBA mode file with lossless compression without
|
|
error? Does it have the bits we expect?
|
|
"""
|
|
|
|
temp_file = self.tempfile("temp.webp")
|
|
# temp_file = "temp.webp"
|
|
|
|
pil_image = hopper("RGBA")
|
|
|
|
mask = Image.new("RGBA", (64, 64), (128, 128, 128, 128))
|
|
# Add some partially transparent bits:
|
|
pil_image.paste(mask, (0, 0), mask)
|
|
|
|
pil_image.save(temp_file, lossless=True)
|
|
|
|
image = Image.open(temp_file)
|
|
image.load()
|
|
|
|
self.assertEqual(image.mode, "RGBA")
|
|
self.assertEqual(image.size, pil_image.size)
|
|
self.assertEqual(image.format, "WEBP")
|
|
image.load()
|
|
image.getdata()
|
|
|
|
self.assert_image_equal(image, pil_image)
|
|
|
|
def test_write_rgba(self):
|
|
"""
|
|
Can we write a RGBA mode file to webp without error.
|
|
Does it have the bits we expect?
|
|
"""
|
|
|
|
temp_file = self.tempfile("temp.webp")
|
|
|
|
pil_image = Image.new("RGBA", (10, 10), (255, 0, 0, 20))
|
|
pil_image.save(temp_file)
|
|
|
|
if _webp.WebPDecoderBuggyAlpha(self):
|
|
return
|
|
|
|
image = Image.open(temp_file)
|
|
image.load()
|
|
|
|
self.assertEqual(image.mode, "RGBA")
|
|
self.assertEqual(image.size, (10, 10))
|
|
self.assertEqual(image.format, "WEBP")
|
|
image.load()
|
|
image.getdata()
|
|
|
|
# early versions of webp are known to produce higher deviations:
|
|
# deal with it
|
|
if _webp.WebPDecoderVersion(self) <= 0x201:
|
|
self.assert_image_similar(image, pil_image, 3.0)
|
|
else:
|
|
self.assert_image_similar(image, pil_image, 1.0)
|
|
|
|
def test_write_unsupported_mode_PA(self):
|
|
"""
|
|
Saving a palette-based file with transparency to WebP format
|
|
should work, and be similar to the original file.
|
|
"""
|
|
|
|
temp_file = self.tempfile("temp.webp")
|
|
file_path = "Tests/images/transparent.gif"
|
|
Image.open(file_path).save(temp_file)
|
|
image = Image.open(temp_file)
|
|
|
|
self.assertEqual(image.mode, "RGBA")
|
|
self.assertEqual(image.size, (200, 150))
|
|
self.assertEqual(image.format, "WEBP")
|
|
|
|
image.load()
|
|
image.getdata()
|
|
target = Image.open(file_path).convert("RGBA")
|
|
|
|
self.assert_image_similar(image, target, 25.0)
|