Esempio n. 1
0
    def to_xxx_colorsys(self, im, func, mode):
        # convert the hard way using the library colorsys routines.

        (r, g, b) = im.split()

        if py3:
            conv_func = self.int_to_float
        else:
            conv_func = self.str_to_float

        if hasattr(itertools, 'izip'):
            iter_helper = itertools.izip
        else:
            iter_helper = itertools.zip_longest

        converted = [
            self.tuple_to_ints(
                func(conv_func(_r), conv_func(_g), conv_func(_b)))
            for (_r, _g,
                 _b) in iter_helper(r.tobytes(), g.tobytes(), b.tobytes())
        ]

        if py3:
            new_bytes = b''.join(
                bytes(chr(h) + chr(s) + chr(v), 'latin-1')
                for (h, s, v) in converted)
        else:
            new_bytes = b''.join(
                chr(h) + chr(s) + chr(v) for (h, s, v) in converted)

        hsv = Image.frombytes(mode, r.size, new_bytes)

        return hsv
Esempio n. 2
0
    def gen_random_image(self, size, mode='RGB'):
        """ Generates a very hard to compress file
        :param size: tuple
        :param mode: optional image mode

        """
        return Image.frombytes(mode, size,
                               os.urandom(size[0] * size[1] * len(mode)))
Esempio n. 3
0
    def test_2bit_palette(self):
        # issue #2258, 2 bit palettes are corrupted.
        outfile = self.tempfile('temp.png')

        rgb = b'\x00' * 2 + b'\x01' * 2 + b'\x02' * 2
        img = Image.frombytes('P', (6, 1), rgb)
        img.putpalette(b'\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF')  # RGB
        img.save(outfile, format='PNG')

        reloaded = Image.open(outfile)

        self.assert_image_equal(img, reloaded)
Esempio n. 4
0
    def assert_unpack(self, mode, rawmode, data, *pixels):
        """
        data - either raw bytes with data or just number of bytes in rawmode.
        """
        if isinstance(data, (int)):
            data_len = data * len(pixels)
            data = bytes(bytearray(range(1, data_len + 1)))

        im = Image.frombytes(mode, (len(pixels), 1), data, "raw", rawmode, 0, 1)

        for x, pixel in enumerate(pixels):
            self.assertEqual(pixel, im.getpixel((x, 0)))
Esempio n. 5
0
    def test_palette_save_L(self):
        # generate an L mode image with a separate palette

        im = hopper('P')
        im_l = Image.frombytes('L', im.size, im.tobytes())
        palette = bytes(bytearray(im.getpalette()))

        out = self.tempfile('temp.gif')
        im_l.save(out, palette=palette)

        reloaded = Image.open(out)

        self.assert_image_equal(reloaded.convert('RGB'), im.convert('RGB'))
Esempio n. 6
0
        def check(colors, size, expected_palette_length):
            # make an image with empty colors in the start of the palette range
            im = Image.frombytes('P', (colors, colors),
                                 bytes(bytearray(range(256-colors, 256))*colors))
            im = im.resize((size, size))
            outfile = BytesIO()
            im.save(outfile, 'GIF')
            outfile.seek(0)
            reloaded = Image.open(outfile)

            # check palette length
            palette_length = max(i+1 for i, v in enumerate(reloaded.histogram()) if v)
            self.assertEqual(expected_palette_length, palette_length)

            self.assert_image_equal(im.convert('RGB'), reloaded.convert('RGB'))
Esempio n. 7
0
 def test_optimize_full_l(self):
     im = Image.frombytes("L", (16, 16), bytes(bytearray(range(256))))
     test_file = BytesIO()
     im.save(test_file, "GIF", optimize=True)
     self.assertEqual(im.mode, "L")
Esempio n. 8
0
    def test_sanity(self):
        im1 = hopper()
        im2 = Image.frombytes(im1.mode, im1.size, im1.tobytes())

        self.assert_image_equal(im1, im2)