class Capybara::Screenshot::Diff::Drivers::VipsDriver

Attributes

new_file_name[R]
old_file_name[R]
options[R]

Public Class Methods

new(new_file_name, old_file_name = nil, **options) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 21
def initialize(new_file_name, old_file_name = nil, **options)
  @new_file_name = new_file_name
  @old_file_name = old_file_name || "#{new_file_name}~"

  @options = options || {}

  reset
end

Public Instance Methods

add_black_box(memo, region) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 77
def add_black_box(memo, region)
  memo.draw_rect([0, 0, 0, 0], *region, fill: true)
end
adds_error_details_to(_log) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 60
def adds_error_details_to(_log)
end
chunky_png_comparator() click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 81
def chunky_png_comparator
  @chunky_png_comparator ||= ImageCompare.new(
    @new_file_name,
    @old_file_name,
    **@options.merge(driver: :chunky_png, tolerance: nil, median_filter_window_size: nil)
  )
end
crop(dimensions, i) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 69
def crop(dimensions, i)
  i.crop(0, 0, *dimensions)
end
difference_level(diff_mask, old_img, _region = nil) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 89
def difference_level(diff_mask, old_img, _region = nil)
  VipsUtil.difference_area_size_by(diff_mask).to_f / image_area_size(old_img)
end
dimension(image) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 135
def dimension(image)
  [image.width, image.height]
end
dimension_changed?(org_image, new_image) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 126
def dimension_changed?(org_image, new_image)
  return false if dimension(org_image) == dimension(new_image)

  change_msg = [org_image, new_image].map { |i| "#{i.width}x#{i.height}" }.join(" => ")
  warn "Image size has changed for #{@new_file_name}: #{change_msg}"

  true
end
draw_rectangles(images, (left, top, right, bottom), rgba) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 139
def draw_rectangles(images, (left, top, right, bottom), rgba)
  images.map do |image|
    image.draw_rect(rgba, left - 1, top - 1, right - left + 2, bottom - top + 2)
  end
end
filter_image_with_median(image, median_filter_window_size) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 73
def filter_image_with_median(image, median_filter_window_size)
  image.median(median_filter_window_size)
end
find_difference_region(new_image, old_image, color_distance_limit, _shift_distance_limit, _area_size_limit, fast_fail: false) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 47
def find_difference_region(new_image, old_image, color_distance_limit, _shift_distance_limit, _area_size_limit, fast_fail: false)
  diff_mask = VipsUtil.difference_mask(color_distance_limit, old_image, new_image)
  region = VipsUtil.difference_region_by(diff_mask)

  [region, diff_mask]
end
from_file(filename) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 117
def from_file(filename)
  result = ::Vips::Image.new_from_file(filename)

  result = result.colourspace("srgb") if result.bands < 3
  result = result.bandjoin(255) if result.bands == 3

  result
end
height_for(image) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 97
def height_for(image)
  image.height
end
image_area_size(old_img) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 93
def image_area_size(old_img)
  width_for(old_img) * height_for(old_img)
end
inscribed?(dimensions, i) click to toggle source

old private

# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 65
def inscribed?(dimensions, i)
  dimension(i) == dimensions || i.width < dimensions[0] || i.height < dimensions[1]
end
load_images(old_file_name, new_file_name, driver = self) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 113
def load_images(old_file_name, new_file_name, driver = self)
  [driver.from_file(old_file_name), driver.from_file(new_file_name)]
end
reset() click to toggle source

Resets the calculated data about the comparison with regard to the “new_image”. Data about the original image is kept.

# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 32
def reset
end
resize_image_to(image, new_width, new_height) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 109
def resize_image_to(image, new_width, new_height)
  image.resize(1.* new_width / new_height)
end
save_image_to(image, filename) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 105
def save_image_to(image, filename)
  image.write_to_file(filename)
end
shift_distance_different?() click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 41
def shift_distance_different?
  warn "[capybara-screenshot-diff] Instead of shift_distance_limit " \
         "please use median_filter_window_size and color_distance_limit options"
  chunky_png_comparator.different?
end
shift_distance_equal?() click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 35
def shift_distance_equal?
  warn "[capybara-screenshot-diff] Instead of shift_distance_limit " \
         "please use median_filter_window_size and color_distance_limit options"
  chunky_png_comparator.quick_equal?
end
size(region) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 54
def size(region)
  return 0 unless region

  (region[2] - region[0]) * (region[3] - region[1])
end
width_for(image) click to toggle source
# File lib/capybara/screenshot/diff/drivers/vips_driver.rb, line 101
def width_for(image)
  image.width
end