def test_sanity(self): self.roundtrip(lena()) self.roundtrip(lena("1")) self.roundtrip(lena("L")) self.roundtrip(lena("P")) self.roundtrip(lena("RGB"))
def test_write_rgb(self): """ Can we write a RGB mode file to webp without error. Does it have the bits we expect? """ temp_file = self.tempfile("temp.webp") lena("RGB").save(temp_file) image = Image.open(temp_file) image.load() self.assertEqual(image.mode, "RGB") self.assertEqual(image.size, (128, 128)) self.assertEqual(image.format, "WEBP") image.load() image.getdata() # If we're using the exact same version of WebP, this test should pass. # but it doesn't if the WebP is generated on Ubuntu and tested on # Fedora. # generated with: dwebp -ppm temp.webp -o lena_webp_write.ppm # target = Image.open('Tests/images/lena_webp_write.ppm') # self.assert_image_equal(image, target) # This test asserts that the images are similar. If the average pixel # difference between the two images is less than the epsilon value, # then we're going to accept that it's a reasonable lossy version of # the image. The included lena images for WebP are showing ~16 on # Ubuntu, the jpegs are showing ~18. target = lena("RGB") self.assert_image_similar(image, target, 20.0)
def test_rgba_p(self): im = lena('RGBA') im.putalpha(lena('L')) converted = im.convert('P') comparable = converted.convert('RGBA') self.assert_image_similar(im, comparable, 20)
def test_sanity(self): # FIXME: assert_image # Implicit asserts no exception: ImageEnhance.Color(lena()).enhance(0.5) ImageEnhance.Contrast(lena()).enhance(0.5) ImageEnhance.Brightness(lena()).enhance(0.5) ImageEnhance.Sharpness(lena()).enhance(0.5)
def test_sanity(self): im = lena() im = im.quantize() self.assert_image(im, "P", im.size) im = lena() im = im.quantize(palette=lena("P")) self.assert_image(im, "P", im.size)
def test_1pxfit(self): # Division by zero in equalize if image is 1 pixel high newimg = ImageOps.fit(lena("RGB").resize((1, 1)), (35, 35)) self.assertEqual(newimg.size, (35, 35)) newimg = ImageOps.fit(lena("RGB").resize((1, 100)), (35, 35)) self.assertEqual(newimg.size, (35, 35)) newimg = ImageOps.fit(lena("RGB").resize((100, 1)), (35, 35)) self.assertEqual(newimg.size, (35, 35))
def test_subsampling(self): def getsampling(im): layer = im.layer return layer[0][1:3] + layer[1][1:3] + layer[2][1:3] # experimental API im = self.roundtrip(lena(), subsampling=-1) # default self.assertEqual(getsampling(im), (2, 2, 1, 1, 1, 1)) im = self.roundtrip(lena(), subsampling=0) # 4:4:4 self.assertEqual(getsampling(im), (1, 1, 1, 1, 1, 1)) im = self.roundtrip(lena(), subsampling=1) # 4:2:2 self.assertEqual(getsampling(im), (2, 1, 1, 1, 1, 1)) im = self.roundtrip(lena(), subsampling=2) # 4:1:1 self.assertEqual(getsampling(im), (2, 2, 1, 1, 1, 1)) im = self.roundtrip(lena(), subsampling=3) # default (undefined) self.assertEqual(getsampling(im), (2, 2, 1, 1, 1, 1)) im = self.roundtrip(lena(), subsampling="4:4:4") self.assertEqual(getsampling(im), (1, 1, 1, 1, 1, 1)) im = self.roundtrip(lena(), subsampling="4:2:2") self.assertEqual(getsampling(im), (2, 1, 1, 1, 1, 1)) im = self.roundtrip(lena(), subsampling="4:1:1") self.assertEqual(getsampling(im), (2, 2, 1, 1, 1, 1)) self.assertRaises( TypeError, lambda: self.roundtrip(lena(), subsampling="1:1:1"))
def test_sanity(self): file = self.tempfile("temp.msp") lena("1").save(file) im = Image.open(file) im.load() self.assertEqual(im.mode, "1") self.assertEqual(im.size, (128, 128)) self.assertEqual(im.format, "MSP")
def test_lab_roundtrip(self): # check to see if we're at least internally consistent. pLab = ImageCms.createProfile("LAB") t = ImageCms.buildTransform(SRGB, pLab, "RGB", "LAB") t2 = ImageCms.buildTransform(pLab, SRGB, "LAB", "RGB") i = ImageCms.applyTransform(lena(), t) out = ImageCms.applyTransform(i, t2) self.assert_image_similar(lena(), out, 2)
def test_sanity(self): self.assertRaises(ValueError, lambda: lena().tobitmap()) lena().convert("1").tobitmap() im1 = lena().convert("1") bitmap = im1.tobitmap() self.assertIsInstance(bitmap, bytes) self.assert_image_equal(im1, fromstring(bitmap))
def test_progressive_compat(self): im1 = self.roundtrip(lena()) im2 = self.roundtrip(lena(), progressive=1) im3 = self.roundtrip(lena(), progression=1) # compatibility self.assert_image_equal(im1, im2) self.assert_image_equal(im1, im3) self.assertFalse(im1.info.get("progressive")) self.assertFalse(im1.info.get("progression")) self.assertTrue(im2.info.get("progressive")) self.assertTrue(im2.info.get("progression")) self.assertTrue(im3.info.get("progressive")) self.assertTrue(im3.info.get("progression"))
def test_write_lossless_rgb(self): temp_file = self.tempfile("temp.webp") lena("RGB").save(temp_file, lossless=True) image = Image.open(temp_file) image.load() self.assertEqual(image.mode, "RGB") self.assertEqual(image.size, (128, 128)) self.assertEqual(image.format, "WEBP") image.load() image.getdata() self.assert_image_equal(image, lena("RGB"))
def test_lab_roundtrip(self): # check to see if we're at least internally consistent. pLab = ImageCms.createProfile("LAB") t = ImageCms.buildTransform(SRGB, pLab, "RGB", "LAB") t2 = ImageCms.buildTransform(pLab, SRGB, "LAB", "RGB") i = ImageCms.applyTransform(lena(), t) self.assertEqual(i.info['icc_profile'], ImageCmsProfile(pLab).tobytes()) out = ImageCms.applyTransform(i, t2) self.assert_image_similar(lena(), out, 2)
def test_split_merge(self): def split_merge(mode): return Image.merge(mode, lena(mode).split()) self.assert_image_equal(lena("1"), split_merge("1")) self.assert_image_equal(lena("L"), split_merge("L")) self.assert_image_equal(lena("I"), split_merge("I")) self.assert_image_equal(lena("F"), split_merge("F")) self.assert_image_equal(lena("P"), split_merge("P")) self.assert_image_equal(lena("RGB"), split_merge("RGB")) self.assert_image_equal(lena("RGBA"), split_merge("RGBA")) self.assert_image_equal(lena("CMYK"), split_merge("CMYK")) self.assert_image_equal(lena("YCbCr"), split_merge("YCbCr"))
def test_sanity(self): im1 = lena() im2 = Image.new(im1.mode, im1.size, 0) for y in range(im1.size[1]): for x in range(im1.size[0]): pos = x, y im2.putpixel(pos, im1.getpixel(pos)) self.assert_image_equal(im1, im2) im2 = Image.new(im1.mode, im1.size, 0) im2.readonly = 1 for y in range(im1.size[1]): for x in range(im1.size[0]): pos = x, y im2.putpixel(pos, im1.getpixel(pos)) self.assertFalse(im2.readonly) self.assert_image_equal(im1, im2) im2 = Image.new(im1.mode, im1.size, 0) pix1 = im1.load() pix2 = im2.load() for y in range(im1.size[1]): for x in range(im1.size[0]): pix2[x, y] = pix1[x, y] self.assert_image_equal(im1, im2)
def test_pack(self): # Pack problems for small tables (@PIL209) im = lena().quantize(3).convert("RGB") expected = [ (3236, (227, 183, 147)), (6297, (143, 84, 81)), (6851, (208, 143, 112))] A = im.getcolors(maxcolors=2) self.assertEqual(A, None) A = im.getcolors(maxcolors=3) A.sort() self.assertEqual(A, expected) A = im.getcolors(maxcolors=4) A.sort() self.assertEqual(A, expected) A = im.getcolors(maxcolors=8) A.sort() self.assertEqual(A, expected) A = im.getcolors(maxcolors=16) A.sort() self.assertEqual(A, expected)
def test_icc(self): # Test ICC support im1 = Image.open("Tests/images/rgb.jpg") icc_profile = im1.info["icc_profile"] self.assertEqual(len(icc_profile), 3144) # Roundtrip via physical file. f = self.tempfile("temp.jpg") im1.save(f, icc_profile=icc_profile) im2 = Image.open(f) self.assertEqual(im2.info.get("icc_profile"), icc_profile) # Roundtrip via memory buffer. im1 = self.roundtrip(lena()) im2 = self.roundtrip(lena(), icc_profile=icc_profile) self.assert_image_equal(im1, im2) self.assertFalse(im1.info.get("icc_profile")) self.assertTrue(im2.info.get("icc_profile"))
def test_convert(self): im = lena('RGB').convert('HSV') comparable = self.to_hsv_colorsys(lena('RGB')) # print ([ord(x) for x in im.split()[0].tobytes()[:80]]) # print ([ord(x) for x in comparable.split()[0].tobytes()[:80]]) # print(im.split()[0].histogram()) # print(comparable.split()[0].histogram()) self.assert_image_similar(im.split()[0], comparable.split()[0], 1, "Hue conversion is wrong") self.assert_image_similar(im.split()[1], comparable.split()[1], 1, "Saturation conversion is wrong") self.assert_image_similar(im.split()[2], comparable.split()[2], 1, "Value conversion is wrong")
def test_roundtrip(self): out = self.tempfile('temp.gif') im = lena() im.save(out) reread = Image.open(out) self.assert_image_similar(reread.convert('RGB'), im, 50)
def palette(mode): im = lena(mode).copy() im.putpalette(list(range(256))*3) p = im.getpalette() if p: return im.mode, p[:10] return im.mode
def test_sanity(self): im = lena() projection = im.getprojection() self.assertEqual(len(projection), 2) self.assertEqual(len(projection[0]), im.size[0]) self.assertEqual(len(projection[1]), im.size[1]) # 8-bit image im = Image.new("L", (10, 10)) self.assertEqual(im.getprojection()[0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(im.getprojection()[1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) im.paste(255, (2, 4, 8, 6)) self.assertEqual(im.getprojection()[0], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0]) self.assertEqual(im.getprojection()[1], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0]) # 32-bit image im = Image.new("RGB", (10, 10)) self.assertEqual(im.getprojection()[0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(im.getprojection()[1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) im.paste(255, (2, 4, 8, 6)) self.assertEqual(im.getprojection()[0], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0]) self.assertEqual(im.getprojection()[1], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0])
def test_sanity(self): im = lena("L") ImageChops.constant(im, 128) ImageChops.duplicate(im) ImageChops.invert(im) ImageChops.lighter(im, im) ImageChops.darker(im, im) ImageChops.difference(im, im) ImageChops.multiply(im, im) ImageChops.screen(im, im) ImageChops.add(im, im) ImageChops.add(im, im, 2.0) ImageChops.add(im, im, 2.0, 128) ImageChops.subtract(im, im) ImageChops.subtract(im, im, 2.0) ImageChops.subtract(im, im, 2.0, 128) ImageChops.add_modulo(im, im) ImageChops.subtract_modulo(im, im) ImageChops.blend(im, im, 0.5) ImageChops.composite(im, im, im) ImageChops.offset(im, 10) ImageChops.offset(im, 10, 20)
def test_deprecated(self): im = lena().copy() draw = ImageDraw.Draw(im) self.assert_warning(DeprecationWarning, lambda: draw.setink(0)) self.assert_warning(DeprecationWarning, lambda: draw.setfill(0))
def test_pack(self): # Pack problems for small tables (@PIL209) im = lena().quantize(3).convert("RGB") expected = [(3236, (227, 183, 147)), (6297, (143, 84, 81)), (6851, (208, 143, 112))] A = im.getcolors(maxcolors=2) self.assertEqual(A, None) A = im.getcolors(maxcolors=3) A.sort() self.assertEqual(A, expected) A = im.getcolors(maxcolors=4) A.sort() self.assertEqual(A, expected) A = im.getcolors(maxcolors=8) A.sort() self.assertEqual(A, expected) A = im.getcolors(maxcolors=16) A.sort() self.assertEqual(A, expected)
def test_16bit_lut(self): """ Tests for 16 bit -> 8 bit lut for converting I->L images see https://github.com/python-pillow/Pillow/issues/440 """ im = lena("I") im.point(list(range(256))*256, 'L')
def test_cmyk_save(self): im = lena('CMYK') out = self.tempfile('temp.tif') im.save(out, compression='tiff_adobe_deflate') im2 = Image.open(out) self.assert_image_equal(im, im2)
def test_octree_quantize(self): im = lena() im = im.quantize(100, Image.FASTOCTREE) self.assert_image(im, "P", im.size) assert len(im.getcolors()) == 100
def test_sanity(self): im = lena() pix = im.load() self.assertEqual(pix[0, 0], (223, 162, 133))
def test_sanity(self): im = lena() im.mode from PIL import ImageMode ImageMode.getmode("1") ImageMode.getmode("L") ImageMode.getmode("P") ImageMode.getmode("RGB") ImageMode.getmode("I") ImageMode.getmode("F") m = ImageMode.getmode("1") self.assertEqual(m.mode, "1") self.assertEqual(m.bands, ("1", )) self.assertEqual(m.basemode, "L") self.assertEqual(m.basetype, "L") m = ImageMode.getmode("RGB") self.assertEqual(m.mode, "RGB") self.assertEqual(m.bands, ("R", "G", "B")) self.assertEqual(m.basemode, "RGB") self.assertEqual(m.basetype, "L")
def test_sanity(self): im = lena() im.mode from PIL import ImageMode ImageMode.getmode("1") ImageMode.getmode("L") ImageMode.getmode("P") ImageMode.getmode("RGB") ImageMode.getmode("I") ImageMode.getmode("F") m = ImageMode.getmode("1") self.assertEqual(m.mode, "1") self.assertEqual(m.bands, ("1",)) self.assertEqual(m.basemode, "L") self.assertEqual(m.basetype, "L") m = ImageMode.getmode("RGB") self.assertEqual(m.mode, "RGB") self.assertEqual(m.bands, ("R", "G", "B")) self.assertEqual(m.basemode, "RGB") self.assertEqual(m.basetype, "L")
def test_mesh(self): # this should be a checkerboard of halfsized lenas in ul, lr im = lena("RGBA") (w, h) = im.size transformed = im.transform( im.size, Image.MESH, [ ((0, 0, w // 2, h // 2), (0, 0, 0, h, w, h, w, 0)), # box # ul -> ccw around quad ((w // 2, h // 2, w, h), (0, 0, 0, h, w, h, w, 0)), # box ], # ul -> ccw around quad Image.BILINEAR, ) # transformed.save('transformed.png') scaled = im.resize((w // 2, h // 2), Image.BILINEAR) checker = Image.new("RGBA", im.size) checker.paste(scaled, (0, 0)) checker.paste(scaled, (w // 2, h // 2)) self.assert_image_equal(transformed, checker) # now, check to see that the extra area is (0, 0, 0, 0) blank = Image.new("RGBA", (w // 2, h // 2), (0, 0, 0, 0)) self.assert_image_equal(blank, transformed.crop((w // 2, 0, w, h // 2))) self.assert_image_equal(blank, transformed.crop((0, h // 2, w // 2, h)))
def test_sanity(self): data = lena().getdata() len(data) list(data) self.assertEqual(data[0], (223, 162, 133))
def test_mode_i(self): src = lena('L') data = list(src.getdata()) im = Image.new('I', src.size, 0) im.putdata(data, 2, 256) target = [2 * elt + 256 for elt in data] self.assertEqual(list(im.getdata()), target)
def test(n): # The ICC APP marker can store 65519 bytes per marker, so # using a 4-byte test code should allow us to detect out of # order issues. icc_profile = (b"Test"*int(n/4+1))[:n] assert len(icc_profile) == n # sanity im1 = self.roundtrip(lena(), icc_profile=icc_profile) self.assertEqual(im1.info.get("icc_profile"), icc_profile or None)
def test_pil163(self): # Division by zero in equalize if < 255 pixels in image (@PIL163) i = lena("RGB").resize((15, 16)) ImageOps.equalize(i.convert("L")) ImageOps.equalize(i.convert("P")) ImageOps.equalize(i.convert("RGB"))
def test_mode_F(self): src = lena('L') data = list(src.getdata()) im = Image.new('F', src.size, 0) im.putdata(data, 2.0, 256.0) target = [2.0 * float(elt) + 256.0 for elt in data] self.assertEqual(list(im.getdata()), target)
def test_mode_F(self): src = lena('L') data = list(src.getdata()) im = Image.new('F', src.size, 0) im.putdata(data, 2.0, 256.0) target = [2.0* float(elt) + 256.0 for elt in data] self.assertEqual(list(im.getdata()), target)
def test_sanity(self): im = lena() type_repr = repr(type(im.getim())) if py3: self.assertIn("PyCapsule", type_repr) self.assertIsInstance(im.im.id, int)