Class: Compatriot::ColorDiffer
- Inherits:
-
Object
- Object
- Compatriot::ColorDiffer
- Defined in:
- lib/compatriot/image_differ/color_differ.rb
Class Method Summary collapse
- .color_difference_of_pixels(pixel1, pixel2) ⇒ Object
-
.color_difference_percentage(image, diff) ⇒ Object
Not called anywhere.
- .create_directory_if_necessary(file) ⇒ Object
- .diff(filename1, filename2) ⇒ Object
- .diff_to_file(filename1, filename2, output_filename) ⇒ Object
- .each_pixel(image) ⇒ Object
- .save_diff_image(output, filename1, filename2) ⇒ Object
Class Method Details
.color_difference_of_pixels(pixel1, pixel2) ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/compatriot/image_differ/color_differ.rb', line 58 def self.color_difference_of_pixels(pixel1, pixel2) score = Math.sqrt( (r(pixel2) - r(pixel1)) ** 2 + (g(pixel2) - g(pixel1)) ** 2 + (b(pixel2) - b(pixel1)) ** 2 ) / Math.sqrt(MAX ** 2 * 3) [grayscale(MAX - (score * MAX).round), score] end |
.color_difference_percentage(image, diff) ⇒ Object
Not called anywhere
69 70 71 72 |
# File 'lib/compatriot/image_differ/color_differ.rb', line 69 def self.color_difference_percentage(image, diff) return 0 if diff.length == 0 (diff.reduce(:+) / image.pixels.length) * 100 end |
.create_directory_if_necessary(file) ⇒ Object
53 54 55 56 |
# File 'lib/compatriot/image_differ/color_differ.rb', line 53 def self.create_directory_if_necessary(file) dir = File.dirname(file) FileUtils.mkdir_p(dir) unless File.directory?(dir) end |
.diff(filename1, filename2) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/compatriot/image_differ/color_differ.rb', line 26 def self.diff(filename1, filename2) image1 = ChunkyPNG::Image.from_file(filename1) image2 = ChunkyPNG::Image.from_file(filename2) output = ChunkyPNG::Image.new(image1.width, image1.height, WHITE) diff = [] each_pixel(image1) do |x, y| pixel1 = image1[x,y] pixel2 = image2[x,y] unless pixel1 == pixel2 output[x,y], score = color_difference_of_pixels(pixel1, pixel2) diff << score end end save_diff_image(output, File.basename(filename1), File.basename(filename2)) diff end |
.diff_to_file(filename1, filename2, output_filename) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/compatriot/image_differ/color_differ.rb', line 7 def self.diff_to_file(filename1, filename2, output_filename) image1 = ChunkyPNG::Image.from_file(filename1) image2 = ChunkyPNG::Image.from_file(filename2) output = ChunkyPNG::Image.new(image1.width, image1.height, WHITE) diff = [] each_pixel(image1) do |x, y| pixel1 = image1[x,y] pixel2 = image2[x,y] unless pixel1 == pixel2 output[x,y], score = color_difference_of_pixels(pixel1, pixel2) diff << score end end output.save(output_filename) end |
.each_pixel(image) ⇒ Object
74 75 76 77 78 79 80 |
# File 'lib/compatriot/image_differ/color_differ.rb', line 74 def self.each_pixel(image) image.width.times do |x| image.height.times do |y| yield(x, y) end end end |
.save_diff_image(output, filename1, filename2) ⇒ Object
47 48 49 50 51 |
# File 'lib/compatriot/image_differ/color_differ.rb', line 47 def self.save_diff_image(output, filename1, filename2) path = Compatriot.filepath_for_screenshot('diffs', filename1) create_directory_if_necessary(path) output.save(path) end |