class Wraith::CompareImages

Attributes

wraith[R]

Public Class Methods

new(config) click to toggle source
# File lib/wraith/compare_images.rb, line 12
def initialize(config)
  @wraith = Wraith::Wraith.new(config)
end

Public Instance Methods

compare_images() click to toggle source
# File lib/wraith/compare_images.rb, line 16
def compare_images
  files = Dir.glob("#{wraith.directory}/*/*.png").sort
  Parallel.each(files.each_slice(2), :in_processes => Parallel.processor_count) do |base, compare|
    diff = base.gsub(/([a-zA-Z0-9]+).png$/, "diff.png")
    info = base.gsub(/([a-zA-Z0-9]+).png$/, "data.txt")
    logger.info "Comparing #{base} and #{compare}"
    compare_task(base, compare, diff, info)
    logger.info "Saved diff"
  end
end
compare_task(base, compare, output, info) click to toggle source
# File lib/wraith/compare_images.rb, line 33
def compare_task(base, compare, output, info)
  cmdline = "compare -fuzz #{wraith.fuzz} -metric AE -highlight-color #{wraith.highlight_color} #{base} #{compare.shellescape} #{output}"
  px_value = Open3.popen3(cmdline) { |_stdin, _stdout, stderr, _wait_thr| stderr.read }.to_f
  begin
    img_size = ImageSize.path(output).size.inject(:*)
    percentage(img_size, px_value, info)
  rescue
    File.open(info, "w") { |file| file.write("invalid") } unless File.exist?(output)
  end
end
percentage(img_size, px_value, info) click to toggle source
# File lib/wraith/compare_images.rb, line 27
def percentage(img_size, px_value, info)
  pixel_count = (px_value / img_size) * 100
  rounded = pixel_count.round(2)
  File.open(info, "w") { |file| file.write(rounded) }
end