15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Compare two images for equality.""" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from PIL import Image 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from PIL import ImageChops 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def Compare(file1, file2, **kwargs): 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Compares two images to see if they're identical. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file1: path to first image to compare 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file2: path to second image to compare 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kwargs: unused for this operator 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Returns: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) None if the images are identical 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A tuple of (errorstring, image) if they're not 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kwargs = kwargs # unused parameter 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) im1 = Image.open(file1) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) im2 = Image.open(file2) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if im1.size != im2.size: 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ("The images are of different size (%s vs %s)" % 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (im1.size, im2.size), im1) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) diff = ImageChops.difference(im1, im2) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if max(diff.getextrema()) != (0, 0): 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ("The images differ", diff) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return None 38