from PIL import ImageFilter
-thumb_size = 320, 320
+thumbSize = 320
gaussian_kernel = ImageFilter.Kernel((3, 3), [1, 2, 1, 2, 4, 2, 1, 2, 1], 16)
return self.ref_im.size != self.src_im.size
def write_diff(self, diff_image, fuzz = 0.05):
+ if self.size_mismatch():
+ return
+
# make a difference image similar to ImageMagick's compare utility
mask = ImageEnhance.Brightness(self.diff).enhance(1.0/fuzz)
mask = mask.convert('L')
and (not os.path.exists(thumb) \
or os.path.getmtime(thumb) < os.path.getmtime(image)):
im = Image.open(image)
- im.thumbnail(thumb_size)
+ imageWidth, imageHeight = im.size
+ if imageWidth <= thumbSize and imageHeight <= thumbSize:
+ if imageWidth >= imageHeight:
+ imageHeight = imageHeight*thumbSize/imageWidth
+ imageWidth = thumbSize
+ else:
+ imageWidth = imageWidth*thumbSize/imageHeight
+ imageHeight = thumbSize
+ html.write(' <td><img src="%s" width="%u" height="%u"/></td>\n' % (image, imageWidth, imageHeight))
+ return
+
+ im.thumbnail((thumbSize, thumbSize))
im.save(thumb)
else:
thumb = image
optparser = optparse.OptionParser(
usage="\n\t%prog [options] <ref_prefix> <src_prefix>")
+ optparser.add_option(
+ '-v', '--verbose',
+ action="store_true", dest="verbose", default=False,
+ help="verbose output")
optparser.add_option(
'-o', '--output', metavar='FILE',
type="string", dest="output", default='index.html',
root, ext = os.path.splitext(src_image)
delta_image = "%s.diff.png" % (root, )
if os.path.exists(ref_image) and os.path.exists(src_image):
- print "Comparing %s and %s\n" % (ref_image, src_image)
+ if options.verbose:
+ sys.stdout.write('Comparing %s and %s ...' % (ref_image, src_image))
comparer = Comparer(ref_image, src_image, options.alpha)
match = comparer.ae(fuzz=options.fuzz) == 0
if match:
+ result = 'MATCH'
bgcolor = '#20ff20'
else:
+ result = 'MISMATCH'
failures += 1
bgcolor = '#ff2020'
+ if options.verbose:
+ sys.stdout.write(' %s\n' % (result,))
html.write(' <tr>\n')
html.write(' <td bgcolor="%s"><a href="%s">%s<a/></td>\n' % (bgcolor, ref_image, image))
if not match or options.show_all: