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
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)))
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)
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)))
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'))
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'))
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")
def test_sanity(self): im1 = hopper() im2 = Image.frombytes(im1.mode, im1.size, im1.tobytes()) self.assert_image_equal(im1, im2)