Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

squarecapadmin / Pillow   python

Repository URL to install this package:

/ Tests / test_image_draft.py

from helper import unittest, PillowTestCase, fromstring, tostring

from PIL import Image


class TestImageDraft(PillowTestCase):
    def setUp(self):
        codecs = dir(Image.core)
        if "jpeg_encoder" not in codecs or "jpeg_decoder" not in codecs:
            self.skipTest("jpeg support not available")

    def draft_roundtrip(self, in_mode, in_size, req_mode, req_size):
        im = Image.new(in_mode, in_size)
        data = tostring(im, 'JPEG')
        im = fromstring(data)
        im.draft(req_mode, req_size)
        return im

    def test_size(self):
        for in_size, req_size, out_size in [
            ((435, 361), (2048, 2048), (435, 361)),  # bigger
            ((435, 361), (435, 361), (435, 361)),  # same
            ((128, 128), (64, 64), (64, 64)),
            ((128, 128), (32, 32), (32, 32)),
            ((128, 128), (16, 16), (16, 16)),

            # large requested width
            ((435, 361), (218, 128), (435, 361)),  # almost 2x
            ((435, 361), (217, 128), (218, 181)),  # more than 2x
            ((435, 361), (109, 64), (218, 181)),  # almost 4x
            ((435, 361), (108, 64), (109, 91)),  # more than 4x
            ((435, 361), (55, 32), (109, 91)),  # almost 8x
            ((435, 361), (54, 32), (55, 46)),  # more than 8x
            ((435, 361), (27, 16), (55, 46)),  # more than 16x

            # and vice versa
            ((435, 361), (128, 181), (435, 361)),  # almost 2x
            ((435, 361), (128, 180), (218, 181)),  # more than 2x
            ((435, 361), (64, 91), (218, 181)),  # almost 4x
            ((435, 361), (64, 90), (109, 91)),  # more than 4x
            ((435, 361), (32, 46), (109, 91)),  # almost 8x
            ((435, 361), (32, 45), (55, 46)),  # more than 8x
            ((435, 361), (16, 22), (55, 46)),  # more than 16x
        ]:
            im = self.draft_roundtrip('L', in_size, None, req_size)
            im.load()
            self.assertEqual(im.size, out_size)

    def test_mode(self):
        for in_mode, req_mode, out_mode in [
            ("RGB", "1", "RGB"),
            ("RGB", "L", "L"),
            ("RGB", "RGB", "RGB"),
            ("RGB", "YCbCr", "YCbCr"),
            ("L", "1", "L"),
            ("L", "L", "L"),
            ("L", "RGB", "L"),
            ("L", "YCbCr", "L"),
            ("CMYK", "1", "CMYK"),
            ("CMYK", "L", "CMYK"),
            ("CMYK", "RGB", "CMYK"),
            ("CMYK", "YCbCr", "CMYK"),
        ]:
            im = self.draft_roundtrip(in_mode, (64, 64), req_mode, None)
            im.load()
            self.assertEqual(im.mode, out_mode)

    def test_several_drafts(self):
        im = self.draft_roundtrip('L', (128, 128), None, (64, 64))
        im.draft(None, (64, 64))
        im.load()


if __name__ == '__main__':
    unittest.main()