class ImageDiff

Public Class Methods

new(baseline, screenshot, acceptant_criteria) click to toggle source
# File lib/image_comparable/image_diff.rb, line 3
def initialize(baseline, screenshot, acceptant_criteria)
  @baseline   = baseline.image
  @screenshot = screenshot.image

  @diff = []
  @baseline.height.times do |y|
    @baseline.row(y).each_with_index do |pixel, x|
      @diff << [x, y] unless pixel == @screenshot[x, y]
    end
  end

  @x                  = @diff.map { |xy| xy[0] }
  @y                  = @diff.map { |xy| xy[1] }
  @acceptant_criteria = acceptant_criteria

end

Public Instance Methods

calculate_score(diff, screenshot, acceptant_criteria) click to toggle source
# File lib/image_comparable/image_diff.rb, line 27
def calculate_score(diff, screenshot, acceptant_criteria)
  raise 'Acceptant criteria cannot be null' if acceptant_criteria.nil?

  acceptant_criteria = acceptant_criteria.to_f
  result             = (diff.length.to_f / screenshot.pixels.length) * 100

  return unless result > acceptant_criteria
  raise "The score result: #{result}%, is minor then " \
          "acceptant_criteria: #{acceptant_criteria}%"
end
draw() click to toggle source
# File lib/image_comparable/image_diff.rb, line 38
def draw
  @screenshot.rect(@x.min, @y.min, @x.max, @y.max, ChunkyPNG::Color::BLACK)
end
file_name() click to toggle source
# File lib/image_comparable/image_diff.rb, line 46
def file_name
  "#{Time.now.strftime('%Y%m%d')}_diff.png"
end
path() click to toggle source
# File lib/image_comparable/image_diff.rb, line 42
def path
  @path ||= File.join(FileUtils.pwd, 'diff_images')
end
save() click to toggle source
# File lib/image_comparable/image_diff.rb, line 20
def save
  Dir.mkdir(path) unless Dir.exist?(path)

  draw.save(File.join(path, file_name))
  calculate_score(@diff, @screenshot, @acceptant_criteria)
end