From 8967a20ad70f9af67f2aa89f22dca54dbbbd1754 Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 7 Dec 2016 03:07:20 +0300 Subject: [PATCH 1/4] test new assert_image_similar implementation --- Tests/helper.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Tests/helper.py b/Tests/helper.py index 7b8bdcce4..f42de8bb2 100644 --- a/Tests/helper.py +++ b/Tests/helper.py @@ -7,6 +7,18 @@ import tempfile import os import unittest +from PIL import Image, ImageMath + + +def convert_to_comparable(a, b): + new_a, new_b = a, b + if a.mode == 'P': + new_a = Image.new('L', a.size) + new_b = Image.new('L', b.size) + new_a.putdata(a.getdata()) + new_b.putdata(b.getdata()) + return new_a, new_b + class PillowTestCase(unittest.TestCase): @@ -88,6 +100,16 @@ class PillowTestCase(unittest.TestCase): except: for abyte, bbyte in zip(a.tobytes(), b.tobytes()): diff += abs(abyte-bbyte) + + a, b = convert_to_comparable(a, b) + + new_diff = 0 + for ach, bch in zip(a.split(), b.split()): + chdiff = ImageMath.eval("abs(a - b)", a=ach, b=bch).convert('L') + new_diff += sum(i * num for i, num in enumerate(chdiff.histogram())) + + self.assertEqual(diff, new_diff) + ave_diff = float(diff)/(a.size[0]*a.size[1]) self.assertGreaterEqual( epsilon, ave_diff, From 52c8e2050ed50c5861db447ab89bdcb3ab8ccfc0 Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 7 Dec 2016 03:09:13 +0300 Subject: [PATCH 2/4] replace test "1"-mode image --- Tests/images/hopper.msp | Bin 2080 -> 2080 bytes Tests/test_file_msp.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/images/hopper.msp b/Tests/images/hopper.msp index 91d9a147ff0a7d2a27f89c66405e9011a464d359..18215f1aff7d85bf066a4f12cb16542c48ad18c2 100644 GIT binary patch literal 2080 zcmXX{Z)_Y#6@N3gPS!S2_e|{%AT{gb9O6x(wogYQJZzV4i1T{$k~L$&V3 zm1xpXwRmj&!Sxp$%L`H@#L4(1-)uHDsC!kNq&^@>C46zLtP}YX$Bl#(91I7t+fWjl zw+DNto%zkY_j`Zl&D-S5r%wnFK>q&==iy^KTN}bxB>%0)Q>l3PPfNsmCfVa~K08%3 z3-C^>Hp<=thno&>i%mBHC?a|4f-+UebWJ-PKuwI7*T21-Zg1xqDIukU=tz9}Po8$# z+T$q=2#K*DE&jXMp2|#56#$qf&fouzvNc<1@8o7I1$6umAOEMi;~3M$cH}TuuZthCi7B8faB!x10Z(z4Nyqqd#rufl4DE~HHym9ic@pPJZ zz4f_+x>$gr*Pq&O+uBoyc8;%ij8_kST1{+C&lQZ>D|^dj@p99T&B=ewIOeQ#bpN$e zGpT=wV{d-lN~fJn^rU!Iz%RF+tbMJmCtfsOc&=O>htH>4I>pq9Oo3~AU%V}J%+h_} zG0EfFo{wM43(Uei%*qtz@8|G95E#`#%M^_wk1N_a0g8qiX-r@o6u346Aq2@&rc^-) zp&+8P4b$i7lTAV(BpUFvIaLG-wG&g2kEi9Vg83^mAUg6%DY>QrOM=s-{PHD_UeF;q(6R!QRve}LL)6TR2D4$qd z{K@Jr~b=I$4xX^gKhLg8P#Y9J<*Gxuh zxcrz3rw(M1UJpWkI7i`nPptP8w~bJs>v)@*GMe4XHEE285iv36oegp_6z8N%u=BjH z_v*^6Y$a!xG*ID>hxz7;YomsX^{YdJ%)UEx_r;pL8UyXm*~Q8y55I3o*OIybc7f;a z4PKQ&&bNI$4VrUL@@@MnM}h!U4KCaMv4u;BJkC|D_q+bA8~A-$Bkl(lRI+X6*`r*UUgdf@;EQ?sh|AE)P`95w3+?-(}r&rsS-Ry-4 zua8T&EWpoYJbirAsww2Da(RJnIcH1gyye?BRJat>XV=`mmcS0AM|67TgT$FZAD#7( zGAi`120gBcQ}2KIqkYz#FP$8>eV^NypCcRck~{dG%d>LTgIN6+tvR{&B+L6OG=Y_W z!Z+QVoAG3TM*yO!B{03-x6xVd<^};^BH)?Tl>=4@UAhR$+<|}>IZtN;>7%|*8+lK+ z%s*{le14X|WWoORDQLLZP^zFspbA}{`3?S^3qvpm^~IM^s2c$1opWM?L^g==g@=#l^Cs>!8Y!S}z*@ zY=2q9)G_~BxDCVNsZj<3dr%%2t`EbP1vU}}d>x3cYe!=d6;vd&=P97W-^5iMAoi6x zJYawqfB@480b@xhh&33;cT$Bz^WnBYFNjKT)_fauRioH1RqS{=d|?j5!3g&+u~07B zxPxRCV|CuY{_W05$z!{-Cfu4 zW@2sKfKV+uJOhjgQ0fKaj&4s^#j#aVmu+>fJ3_Nqo z0(ezPwn+b#@x4pXv9L*KMu&cR^LdC4P^dE$h+|jfO#)~h!>K*v+b?}I50P>Ws0S(S w2?`n;WuUTfNrf?tREgvf>5Ksm;YX)l;2xfX0Q^vd)8D~}5{{4nCIrO(3pB#RqW}N^ literal 2080 zcmXX{Z)jWB7609*XXn{2^vP|^=oo(1WELy)+QBwPH8!W5a}-@UlSkr0KD5&0 zg>`MRlGxX#Ep{2q(WDdt1y4v|UHLUx@zV!8)M}f-=qD%ZbAp^WPN0x^WYI>vq?v2& zys|6ly?f62oxk_oqwq_kF9-;*|9`x_w?g0k>g7Frvp?O=M1tPel0-MpnA_gIkSWEA znC{Xi%~QznSdMoGvh9E>!pF|3nPPMxo8y4iH&xwu{)*Mp!=q9nVnFowJ@^;5a@{?_ zhz`aA=BvwJlzJl3Y^Dg9x;S(DMfHB6*mHo#0ud-vpWOOyeJ2;nmU=>aC{FS7JB@lH zcE+-@nP;GPz4?cYo1ZnL><$*KAB2TEb91CoAHNbQMKgR~GvQAw%a@P-J!n~c;M8M# z46%q`|Mv0Ca(7Q;@6K}@{ZsWl59)pQvvb8z;o`1pRlL;xyV&5r^SM|dx3BZkv3%s7 z*uVH}!m@Hv|55QPf%on=*1y|*Fjxxx@abxO3Qt6yJRmYJM2lSCb?BNf0G0<2NFLOi zZylc%RE6Ux$OzT%Eba(~Nds!A6e{tcs-F~4b->7Q-W`OBOL-6p!L5SKX%IrFME1if zMN8b6(FK{KDj=2%<)TmsNi;#Iy0M&!@IciBGXSf|qa~e8g^?RjXB8gH$Rhd;2!)3# z^9V_qi>aP{R@o|71P_ru>FL#un;-7f1ZBfH+I5)a#*>%p zqrgP(q10T~BDpL*+}85_GuZceO64BsdOaZCV(afF+5(Zr1QoJV><@q<2p_p7qdia6o0zyX1LzN<>M+>GhHM!9H+S*!*rxOlm1H$Ay zaW$Q`Oh7AFMChT&_xJewLQ@vyV6@G#}RJ=oU8%=iS9cFB}*BX3Gud^|f^R zeYrMF_B1GEZg&r^mN`$_WKaE8ZFOPl?NpK&+*VCIwe$;l|Bc>?laLPAncjQj?knf5 zT$-oiZqn4SDl5{hgeo?P`K*DZ>sx;tTYL8nm-Dz?6@eSC1&Zan{2lVndET5z%@xojl?D;0rL7=5qmiUJa3ZL7_ zRchCct(cvX(zX*0chB2pO^&_a}p4Wlx86DSo;yP02hROQoq|m(v_tByh#|ig_TRNH-x@jV`o) z?h6&3oJXZ1%L#nY6PWWQ&3ESUl$&oJQ%f8ncX1| zZQRd)$q-+y+5RI@1HN1=cM5tN)r4(Q27R&^y-1C~(+)cV_(MZ*pFSpP%(wn229c$(|yDySFsC>hMD?f#{7(M z*gK~a7hj{F%4jlue?`z1&%h6zMi+W75M>$!)lD*p-PfRz9Wh}L+Ut!ue5KHN3*KgO z_lg3NsGScrsOF5;`m#=ZMc-eC=La1ZOiI(lc-@#Hb+oNORq4IFA?T@~)$>QIahu@N zn$dchycqc7_$+im{I^EDXr`1#RRg7uHp+*VuK}|khJmIPt+!7F`!Y;i8r01rM(5ZH z{9|+|F_RAHg4kDnnc)je`&%cevQ>O%eZ|0C`rkWf0!<_M(TQ!S6$OvUg*nZa#}PXY zGYR8GdG5H`w1PmTrs5csZ}3tVCPx$~bcupG!ZJpkH|s?OZHD=ObN%B%v{$_{>0}v~ vIoDN%c7g~hkxCEUH*4x%Wz?`~_K~Phz$6729)j+U@)2!>qEZc8JWcjLt-ix9 diff --git a/Tests/test_file_msp.py b/Tests/test_file_msp.py index f7c518379..e174d0061 100644 --- a/Tests/test_file_msp.py +++ b/Tests/test_file_msp.py @@ -31,7 +31,7 @@ class TestFileMsp(PillowTestCase): # Assert self.assertEqual(im.size, (128, 128)) - self.assert_image_similar(im, hopper("1"), 4) + self.assert_image_equal(im, hopper("1"), 4) def test_cannot_save_wrong_mode(self): # Arrange From ba92896a53e4f86fa2e03eeb022676ef32a3752f Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 7 Dec 2016 04:39:36 +0300 Subject: [PATCH 3/4] remove old version --- Tests/helper.py | 15 ++------------- Tests/test_imagecms.py | 6 +++--- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/Tests/helper.py b/Tests/helper.py index f42de8bb2..3cf51185b 100644 --- a/Tests/helper.py +++ b/Tests/helper.py @@ -92,23 +92,12 @@ class PillowTestCase(unittest.TestCase): a.size, b.size, msg or "got size %r, expected %r" % (a.size, b.size)) - diff = 0 - try: - ord(b'0') - for abyte, bbyte in zip(a.tobytes(), b.tobytes()): - diff += abs(ord(abyte)-ord(bbyte)) - except: - for abyte, bbyte in zip(a.tobytes(), b.tobytes()): - diff += abs(abyte-bbyte) - a, b = convert_to_comparable(a, b) - new_diff = 0 + diff = 0 for ach, bch in zip(a.split(), b.split()): chdiff = ImageMath.eval("abs(a - b)", a=ach, b=bch).convert('L') - new_diff += sum(i * num for i, num in enumerate(chdiff.histogram())) - - self.assertEqual(diff, new_diff) + diff += sum(i * num for i, num in enumerate(chdiff.histogram())) ave_diff = float(diff)/(a.size[0]*a.size[1]) self.assertGreaterEqual( diff --git a/Tests/test_imagecms.py b/Tests/test_imagecms.py index e1a3e0af5..136590667 100644 --- a/Tests/test_imagecms.py +++ b/Tests/test_imagecms.py @@ -205,7 +205,7 @@ class TestImageCms(PillowTestCase): target = Image.open('Tests/images/hopper.Lab.tif') - self.assert_image_similar(i, target, 30) + self.assert_image_similar(i, target, 3.5) def test_lab_srgb(self): psRGB = ImageCms.createProfile("sRGB") @@ -326,12 +326,12 @@ class TestImageCms(PillowTestCase): prepatch, these would segfault, postpatch they should emit a typeerror """ - + with self.assertRaises(TypeError): ImageCms.ImageCmsProfile(0).tobytes() with self.assertRaises(TypeError): ImageCms.ImageCmsProfile(1).tobytes() - + if __name__ == '__main__': unittest.main() From 9ee1f58215d29913e3a1578522ab793fab3ca50c Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 7 Dec 2016 05:16:10 +0300 Subject: [PATCH 4/4] fix I;16 mode --- Tests/helper.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Tests/helper.py b/Tests/helper.py index 3cf51185b..c5ec253ca 100644 --- a/Tests/helper.py +++ b/Tests/helper.py @@ -17,6 +17,9 @@ def convert_to_comparable(a, b): new_b = Image.new('L', b.size) new_a.putdata(a.getdata()) new_b.putdata(b.getdata()) + elif a.mode == 'I;16': + new_a = a.convert('I') + new_b = b.convert('I') return new_a, new_b