X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=scripts%2Fsnapdiff.py;h=59ec870ea06954eee1f5ca69f9297d5c42ee3f2d;hb=207ced34a8b998539414c5213acc6d7a393ca27a;hp=53d9f826579f70fcdbbdccf9f33f242e96a024f1;hpb=61840fb9f088ba86135d72db977ceb7748b41dba;p=apitrace
diff --git a/scripts/snapdiff.py b/scripts/snapdiff.py
index 53d9f82..59ec870 100755
--- a/scripts/snapdiff.py
+++ b/scripts/snapdiff.py
@@ -42,7 +42,7 @@ from PIL import ImageEnhance
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)
@@ -71,6 +71,9 @@ class Comparer:
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')
@@ -119,7 +122,18 @@ def surface(html, image):
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('
![](%s) | \n' % (image, imageWidth, imageHeight))
+ return
+
+ im.thumbnail((thumbSize, thumbSize))
im.save(thumb)
else:
thumb = image
@@ -134,7 +148,6 @@ def is_image(path):
def find_images(prefix):
- prefix = os.path.abspath(prefix)
if os.path.isdir(prefix):
prefix_dir = prefix
else:
@@ -155,6 +168,10 @@ def main():
optparser = optparse.OptionParser(
usage="\n\t%prog [options] ")
+ 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',
@@ -171,6 +188,10 @@ def main():
'--overwrite',
action="store_true", dest="overwrite", default=False,
help="overwrite images")
+ optparser.add_option(
+ '--show-all',
+ action="store_true", dest="show_all", default=False,
+ help="show all images, including similar ones")
(options, args) = optparser.parse_args(sys.argv[1:])
@@ -192,31 +213,46 @@ def main():
html.write('\n')
html.write(' \n')
html.write(' \n')
- html.write(' %s | %s | Δ |
\n' % (ref_prefix, src_prefix))
+ html.write(' File | %s | %s | Δ |
\n' % (ref_prefix, src_prefix))
+ failures = 0
for image in images:
ref_image = ref_prefix + image
src_image = src_prefix + image
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):
- if options.overwrite \
- or not os.path.exists(delta_image) \
- or (os.path.getmtime(delta_image) < os.path.getmtime(ref_image) \
- and os.path.getmtime(delta_image) < os.path.getmtime(src_image)):
-
- comparer = Comparer(ref_image, src_image, options.alpha)
- comparer.write_diff(delta_image, fuzz=options.fuzz)
-
+ 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(' \n')
- surface(html, ref_image)
- surface(html, src_image)
- surface(html, delta_image)
+ html.write(' %s | \n' % (bgcolor, ref_image, image))
+ if not match or options.show_all:
+ if options.overwrite \
+ or not os.path.exists(delta_image) \
+ or (os.path.getmtime(delta_image) < os.path.getmtime(ref_image) \
+ and os.path.getmtime(delta_image) < os.path.getmtime(src_image)):
+ comparer.write_diff(delta_image, fuzz=options.fuzz)
+ surface(html, ref_image)
+ surface(html, src_image)
+ surface(html, delta_image)
html.write('
\n')
html.flush()
html.write('
\n')
html.write(' \n')
html.write('\n')
+ if failures:
+ sys.exit(1)
if __name__ == '__main__':
main()