Sha256: 8072e961323f865eb3b65ba13c10a119cbe6900aea775b547a47cb5c4644498a
Contents?: true
Size: 1.48 KB
Versions: 7
Compression:
Stored size: 1.48 KB
Contents
require 'chunky_png' include ChunkyPNG::Color module Browsery class DiffImage def initialize(base_image, new_image) @base_image = ChunkyPNG::Image.from_file(base_image) @new_image = ChunkyPNG::Image.from_file(new_image) @diff_image = ChunkyPNG::Image.new(@base_image.width, @new_image.width, BLACK) end def calculate_changes diff = [] @base_image.height.times do |y| @base_image.row(y).each_with_index do |pixel, x| unless pixel == @new_image[x,y] score = Math.sqrt( (r(@new_image[x,y]) - r(pixel)) ** 2 + (g(@new_image[x,y]) - g(pixel)) ** 2 + (b(@new_image[x,y]) - b(pixel)) ** 2 ) / Math.sqrt(MAX ** 2 * 3) diff << score end @diff_image[x,y] = rgb( r(pixel) + r(@new_image[x,y]) - 2 * [r(pixel), r(@new_image[x,y])].min, g(pixel) + g(@new_image[x,y]) - 2 * [g(pixel), g(@new_image[x,y])].min, b(pixel) + b(@new_image[x,y]) - 2 * [b(pixel), b(@new_image[x,y])].min ) end end total_pixels = @base_image.pixels.length diff_percentage = diff.empty? ? 0 : diff.inject {|sum, value| sum + value} / total_pixels puts "pixels (total): #{total_pixels}" puts "pixels changed: #{diff.length}" puts "image changed (%): #{diff_percentage * 100} %" diff_percentage end def save_diff(diff_image) @diff_image.save(diff_image) end end end
Version data entries
7 entries across 7 versions & 1 rubygems