Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 import unittest | |
| 6 from PIL import Image | |
|
craigdh
2013/06/14 19:08:40
just import PIL and use PIL.Image
cgrimm
2013/06/17 16:24:58
The __init__.py file in PIL isn't configured to im
| |
| 7 import image_tools | |
| 8 | |
| 9 | |
| 10 def _GenImage(size, color): | |
| 11 return Image.new('RGB', size, color) | |
| 12 | |
| 13 | |
| 14 def _AllPixelsOfColor(image, color): | |
| 15 data = image.getdata() | |
|
craigdh
2013/06/14 19:08:40
no need for the intermediate variable
cgrimm
2013/06/17 16:24:58
Done.
| |
| 16 return not any(px != color for px in data) | |
| 17 | |
| 18 | |
| 19 class ImageToolsTest(unittest.TestCase): | |
| 20 | |
| 21 def testAreTheSameSize(self): | |
| 22 black25x25 = _GenImage((25, 25), (0, 0, 0)) | |
| 23 white25x25 = _GenImage((25, 25), (255, 255, 255)) | |
| 24 black50x50 = _GenImage((50, 50), (0, 0, 0)) | |
| 25 white50x50 = _GenImage((50, 50), (255, 255, 255)) | |
| 26 | |
| 27 self.assertTrue(image_tools._AreTheSameSize([black25x25, black25x25])) | |
| 28 self.assertTrue(image_tools._AreTheSameSize([white25x25, white25x25])) | |
| 29 self.assertTrue(image_tools._AreTheSameSize([black50x50, black50x50])) | |
| 30 self.assertTrue(image_tools._AreTheSameSize([white50x50, white50x50])) | |
| 31 self.assertTrue(image_tools._AreTheSameSize([black25x25, white25x25])) | |
| 32 self.assertTrue(image_tools._AreTheSameSize([black50x50, white50x50])) | |
| 33 | |
| 34 self.assertFalse(image_tools._AreTheSameSize([black50x50, black25x25])) | |
| 35 self.assertFalse(image_tools._AreTheSameSize([white50x50, white25x25])) | |
| 36 self.assertFalse(image_tools._AreTheSameSize([black25x25, white50x50])) | |
| 37 self.assertFalse(image_tools._AreTheSameSize([black50x50, white25x25])) | |
| 38 | |
| 39 self.assertRaises(Exception, image_tools._AreTheSameSize, []) | |
| 40 self.assertRaises(Exception, image_tools._AreTheSameSize, [black50x50]) | |
| 41 | |
| 42 def testGetColorDist(self): | |
| 43 px1 = (0, 0, 0) | |
| 44 px2 = (255, 255, 255) | |
| 45 px3 = (0, 255, 255) | |
| 46 px4 = (0, 0, 255) | |
| 47 | |
| 48 self.assertAlmostEquals(image_tools._GetColorDist(px1, px1), 0., places=4) | |
| 49 self.assertAlmostEquals(image_tools._GetColorDist(px1, px2), 1., places=4) | |
| 50 self.assertAlmostEquals(image_tools._GetColorDist(px2, px2), 0., places=4) | |
| 51 self.assertAlmostEquals(image_tools._GetColorDist(px1, px3), 2./3, places=4) | |
| 52 self.assertAlmostEquals(image_tools._GetColorDist(px1, px4), 1./3, places=4) | |
| 53 self.assertAlmostEquals(image_tools._GetColorDist(px3, px4), 1./3, places=4) | |
| 54 | |
| 55 def testGetColorDistAsColor(self): | |
| 56 px1 = (0, 0, 0) | |
| 57 px2 = (255, 255, 255) | |
| 58 | |
| 59 self.assertEquals(image_tools._GetColorDistAsColor(px1, px2), | |
| 60 (255, 255, 255)) | |
| 61 self.assertEquals(image_tools._GetColorDistAsColor(px1, px1), | |
| 62 (0, 0, 0)) | |
| 63 self.assertEquals(image_tools._GetColorDistAsColor(px2, px2), | |
| 64 (0, 0, 0)) | |
| 65 | |
| 66 def testBrightness(self): | |
| 67 px1 = (0, 0, 0) | |
| 68 px2 = (255, 255, 255) | |
| 69 px3 = (1, 2, 3) | |
| 70 | |
| 71 self.assertEquals(image_tools._Brightness(px1), 0) | |
| 72 self.assertEquals(image_tools._Brightness(px2), 255*3) | |
| 73 self.assertEquals(image_tools._Brightness(px3), 6) | |
| 74 | |
| 75 def testMinPixel(self): | |
| 76 px1 = (0, 0, 0) | |
| 77 px2 = (255, 255, 255) | |
| 78 px3 = (1, 2, 3) | |
| 79 | |
| 80 self.assertEquals(image_tools._MinPixel(px1, px2), px1) | |
| 81 self.assertEquals(image_tools._MinPixel(px1, px3), px1) | |
| 82 self.assertEquals(image_tools._MinPixel(px2, px3), px3) | |
| 83 self.assertEquals(image_tools._MinPixel(px1, px1), px1) | |
| 84 | |
| 85 def testMaxPixel(self): | |
| 86 px1 = (0, 0, 0) | |
| 87 px2 = (255, 255, 255) | |
| 88 px3 = (1, 2, 3) | |
| 89 | |
| 90 self.assertEquals(image_tools._MaxPixel(px1, px2), px2) | |
| 91 self.assertEquals(image_tools._MaxPixel(px1, px3), px3) | |
| 92 self.assertEquals(image_tools._MaxPixel(px2, px3), px2) | |
| 93 self.assertEquals(image_tools._MaxPixel(px1, px1), px1) | |
| 94 | |
| 95 def testCreateMask(self): | |
| 96 black25x25 = _GenImage((25, 25), (0, 0, 0)) | |
| 97 black50x50 = _GenImage((50, 50), (0, 0, 0)) | |
| 98 white25x25 = _GenImage((25, 25), (255, 255, 255)) | |
| 99 gray25x25 = _GenImage((25, 25), (127, 127, 127)) | |
| 100 | |
| 101 m1 = image_tools.CreateMask([black25x25, white25x25], True, 1) | |
| 102 self.assertTrue(_AllPixelsOfColor(m1, (255, 255, 255))) | |
| 103 m2 = image_tools.CreateMask([black25x25, black25x25], True, 1) | |
| 104 self.assertTrue(_AllPixelsOfColor(m2, (0, 0, 0))) | |
| 105 m3 = image_tools.CreateMask([white25x25, white25x25], True, 1) | |
| 106 self.assertTrue(_AllPixelsOfColor(m3, (0, 0, 0))) | |
| 107 | |
| 108 m4 = image_tools.CreateMask([white25x25, gray25x25], False, 0) | |
| 109 self.assertFalse(_AllPixelsOfColor(m4, (0, 0, 0)) or | |
| 110 _AllPixelsOfColor(m4, (255, 255, 255))) | |
| 111 | |
| 112 m5 = image_tools.CreateMask([white25x25, white25x25], True, -1) | |
| 113 self.assertTrue(_AllPixelsOfColor(m5, (255, 255, 255))) | |
| 114 m6 = image_tools.CreateMask([white25x25, black25x25], True, -1) | |
| 115 self.assertTrue(_AllPixelsOfColor(m6, (255, 255, 255))) | |
| 116 | |
| 117 self.assertRaises(Exception, image_tools.CreateMask, | |
| 118 [white25x25, black50x50], True, 1) | |
| 119 | |
| 120 def testComputeLargestDifference(self): | |
| 121 white25x25 = _GenImage((25, 25), (255, 255, 255)) | |
| 122 black25x25 = _GenImage((25, 25), (0, 0, 0)) | |
| 123 wd = white25x25.getdata() | |
| 124 bd = black25x25.getdata() | |
| 125 | |
| 126 self.assertEquals(list(image_tools._ComputeLargestDifference(wd, bd, bd)), | |
| 127 list(wd)) | |
| 128 self.assertEquals(list(image_tools._ComputeLargestDifference(bd, wd, bd)), | |
| 129 list(wd)) | |
| 130 self.assertEquals(list(image_tools._ComputeLargestDifference(wd, wd, wd)), | |
| 131 list(wd)) | |
| 132 self.assertEquals(list(image_tools._ComputeLargestDifference(bd, bd, bd)), | |
| 133 list(bd)) | |
| 134 self.assertEquals(list(image_tools._ComputeLargestDifference(bd, wd, wd)), | |
| 135 list(bd)) | |
| 136 | |
| 137 def testThresholdColorDiff(self): | |
| 138 p1 = ((0, 0, 0), (1, 2, 3)) | |
| 139 p2 = ((0, 0, 0), (0, 0, 0)) | |
| 140 | |
| 141 self.assertEquals(image_tools._ThresholdColorDiff(p1[0], p1[1], 0), 1.) | |
| 142 self.assertEquals(image_tools._ThresholdColorDiff(p2[0], p2[1], 0), 0.) | |
| 143 self.assertEquals(image_tools._ThresholdColorDiff(p1[0], p1[1], | |
| 144 14./(3*255**2)), 0.) | |
| 145 self.assertEquals(image_tools._ThresholdColorDiff(p1[0], p1[1], | |
| 146 13./(3*255**2)), 1.) | |
| 147 | |
| 148 def testMaskToValue(self): | |
| 149 px1 = (0, 0, 0) | |
| 150 px2 = (255, 255, 255) | |
| 151 px3 = (100, 100, 100) | |
| 152 | |
| 153 self.assertEquals(image_tools._MaskToValue(px1), 1.) | |
| 154 self.assertEquals(image_tools._MaskToValue(px2), 0.) | |
| 155 self.assertRaises(Exception, image_tools._MaskToValue, px3) | |
| 156 | |
| 157 def testTotalDifferentPixels(self): | |
| 158 white25x25 = _GenImage((25, 25), (255, 255, 255)) | |
| 159 white50x50 = _GenImage((50, 50), (255, 255, 255)) | |
| 160 black25x25 = _GenImage((25, 25), (0, 0, 0)) | |
| 161 | |
| 162 self.assertEquals(image_tools.TotalDifferentPixels(white25x25, | |
| 163 white25x25), | |
| 164 0) | |
| 165 self.assertEquals(image_tools.TotalDifferentPixels(black25x25, | |
| 166 black25x25), | |
| 167 0) | |
| 168 self.assertEquals(image_tools.TotalDifferentPixels(white25x25, | |
| 169 black25x25), | |
| 170 25*25) | |
| 171 self.assertEquals(image_tools.TotalDifferentPixels(white25x25, | |
| 172 black25x25, | |
| 173 mask=white25x25), | |
| 174 0) | |
| 175 self.assertEquals(image_tools.TotalDifferentPixels(white25x25, | |
| 176 white25x25, | |
| 177 mask=white25x25), | |
| 178 0) | |
| 179 self.assertEquals(image_tools.TotalDifferentPixels(white25x25, | |
| 180 black25x25, | |
| 181 mask=black25x25), | |
| 182 25*25) | |
| 183 self.assertEquals(image_tools.TotalDifferentPixels(white25x25, | |
| 184 white25x25, | |
| 185 mask=black25x25), | |
| 186 0) | |
| 187 self.assertRaises(Exception, image_tools.TotalDifferentPixels, | |
| 188 white25x25, white50x50) | |
| 189 self.assertRaises(Exception, image_tools.TotalDifferentPixels, | |
| 190 white25x25, white25x25, mask=white50x50) | |
| 191 | |
| 192 def testSameImage(self): | |
| 193 white25x25 = _GenImage((25, 25), (255, 255, 255)) | |
| 194 black25x25 = _GenImage((25, 25), (0, 0, 0)) | |
| 195 white50x50 = _GenImage((50, 50), (255, 255, 255)) | |
| 196 | |
| 197 self.assertTrue(image_tools.SameImage(white25x25, white25x25, | |
| 198 max_different_pixels=0)) | |
| 199 self.assertTrue(image_tools.SameImage(white25x25, black25x25, | |
| 200 max_different_pixels=25*25)) | |
| 201 self.assertFalse(image_tools.SameImage(black25x25, black25x25, | |
| 202 max_different_pixels=-1)) | |
| 203 | |
| 204 self.assertTrue(image_tools.SameImage(white25x25, black25x25, | |
| 205 max_different_pixels=25*25, | |
| 206 mask=white25x25)) | |
| 207 self.assertTrue(image_tools.SameImage(white25x25, white25x25, | |
| 208 max_different_pixels=0, | |
| 209 mask=white25x25)) | |
| 210 self.assertFalse(image_tools.SameImage(white25x25, white25x25, | |
| 211 max_different_pixels=-1, | |
| 212 mask=white25x25)) | |
| 213 | |
| 214 self.assertRaises(Exception, image_tools.SameImage, | |
| 215 white25x25, white50x50, | |
| 216 max_different_pixels=1) | |
| 217 self.assertRaises(Exception, image_tools.SameImage, | |
| 218 white25x25, white25x25, | |
| 219 max_different_pixels=1, mask=white50x50) | |
| 220 | |
| 221 def _GenImage(self, size, color): | |
| 222 return Image.new('RGB', size, color) | |
| 223 | |
| 224 def _AllPixelsOfColor(self, image, color): | |
| 225 data = image.getdata() | |
| 226 for i in data: | |
|
craigdh
2013/06/14 19:08:40
just return not any(color != px for px in image.ge
cgrimm
2013/06/17 16:24:58
Done.
| |
| 227 if i == color: | |
| 228 continue | |
| 229 else: | |
| 230 return False | |
| 231 return True | |
| 232 | |
|
craigdh
2013/06/14 19:08:40
two blank lines here
cgrimm
2013/06/17 16:24:58
Done.
| |
| 233 if __name__ == '__main__': | |
| 234 unittest.main() | |
| 235 | |
| 236 | |
| OLD | NEW |