import math
import operator
-import Image
-import ImageChops
-import ImageEnhance
+from PIL import Image
+from PIL import ImageChops
+from PIL import ImageEnhance
thumb_size = 320, 320
'''Image comparer.'''
def __init__(self, ref_image, src_image, alpha = False):
- self.ref_im = Image.open(ref_image)
- self.src_im = Image.open(src_image)
+ if isinstance(ref_image, basestring):
+ self.ref_im = Image.open(ref_image)
+ else:
+ self.ref_im = ref_image
+
+ if isinstance(src_image, basestring):
+ self.src_im = Image.open(src_image)
+ else:
+ self.src_im = src_image
# Ignore
if not alpha:
self.diff = ImageChops.difference(self.src_im, self.ref_im)
+ def size_mismatch(self):
+ return self.ref_im.size != self.src_im.size
+
def write_diff(self, diff_image, fuzz = 0.05):
# make a difference image similar to ImageMagick's compare utility
mask = ImageEnhance.Brightness(self.diff).enhance(1.0/fuzz)
diff_im.save(diff_image)
def precision(self):
+ if self.size_mismatch():
+ return 0.0
+
# See also http://effbot.org/zone/pil-comparing-images.htm
h = self.diff.histogram()
square_error = 0
bits = -math.log(rel_error)/math.log(2.0)
return bits
- def ae(self):
+ def ae(self, fuzz = 0.05):
# Compute absolute error
+
+ if self.size_mismatch():
+ return sys.maxint
+
# TODO: this is approximate due to the grayscale conversion
h = self.diff.convert('L').histogram()
ae = sum(h[int(255 * fuzz) + 1 : 256])
global options
optparser = optparse.OptionParser(
- usage="\n\t%prog [options] <ref_prefix> <src_prefix>",
- version="%%prog")
+ usage="\n\t%prog [options] <ref_prefix> <src_prefix>")
optparser.add_option(
'-o', '--output', metavar='FILE',
type="string", dest="output", default='index.html',