image_compare 1.0.0.pre.dev → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +66 -4
 - data/lib/image_compare/matcher.rb +1 -1
 - data/lib/image_compare/modes.rb +3 -3
 - data/lib/image_compare/version.rb +1 -1
 - data/lib/image_compare.rb +1 -1
 - metadata +4 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c9267d7bfce2137312246ee71c78be6123829c8d85306a6514fac4a5177fc1ed
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 594a599fe736f30a8b92c28729e05db90c375ce9a3bf2c90056f5044a1151743
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 980ef7ed37029399bb9fa7563b5f916bf466c44de53eecb433eed25841c5af37c4093cf59f4f1df45434c839b67e859a5d50294765e9d9c265bae45c54df6e2f
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 17e44c8a2009a67e9a62ffc36d5cf68aa2e8c9c74d43ea4b34f090873c5461a10a023fb0802e5ea41cbd188c56b97dbda6fabc9384d67cdb1aee4899750e74fb
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -36,6 +36,14 @@ Source images used in examples: 
     | 
|
| 
       36 
36 
     | 
    
         
             
            <img src='https://raw.githubusercontent.com/instantink/image_compare/master/spec/fixtures/a.png' width='300' />
         
     | 
| 
       37 
37 
     | 
    
         
             
            <img src='https://raw.githubusercontent.com/instantink/image_compare/master/spec/fixtures/b.png' width='300' />
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
      
 39 
     | 
    
         
            +
            ### Color
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            Compare pixels, resulting score is a ratio of unequal pixels (with respect to provided tolerance).
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            Resulting diff contains version of the first image with different pixels highlighted in red and red bounding box.
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            <img src='https://raw.githubusercontent.com/instantink/image_compare/master/spec/fixtures/color_diff.png' width='300' />
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
       39 
47 
     | 
    
         
             
            ### Base (RGB) mode
         
     | 
| 
       40 
48 
     | 
    
         | 
| 
       41 
49 
     | 
    
         
             
            Compare pixels by values, resulting score is a ratio of unequal pixels.
         
     | 
| 
         @@ -61,12 +69,17 @@ Resulting diff contains grayscale version of the first image with different pixe 
     | 
|
| 
       61 
69 
     | 
    
         
             
            ## Usage
         
     | 
| 
       62 
70 
     | 
    
         | 
| 
       63 
71 
     | 
    
         
             
            ```ruby
         
     | 
| 
       64 
     | 
    
         
            -
            #  
     | 
| 
       65 
     | 
    
         
            -
            # and base ( 
     | 
| 
      
 72 
     | 
    
         
            +
            # Create new matcher with default threshold equals to 0
         
     | 
| 
      
 73 
     | 
    
         
            +
            # and base (Color) mode
         
     | 
| 
       66 
74 
     | 
    
         
             
            cmp = ImageCompare::Matcher.new
         
     | 
| 
      
 75 
     | 
    
         
            +
            cmp.mode #=> ImageCompare::Modes::Color
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            # Create new matcher with default threshold equals to 0
         
     | 
| 
      
 78 
     | 
    
         
            +
            # and base (RGB) mode
         
     | 
| 
      
 79 
     | 
    
         
            +
            cmp = ImageCompare::Matcher.new mode: :rgb
         
     | 
| 
       67 
80 
     | 
    
         
             
            cmp.mode #=> ImageCompare::Modes::RGB
         
     | 
| 
       68 
81 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
            #  
     | 
| 
      
 82 
     | 
    
         
            +
            # Create matcher with specific threshold
         
     | 
| 
       70 
83 
     | 
    
         
             
            cmp = ImageCompare::Matcher.new threshold: 0.05
         
     | 
| 
       71 
84 
     | 
    
         
             
            cmp.threshold #=> 0.05
         
     | 
| 
       72 
85 
     | 
    
         | 
| 
         @@ -74,7 +87,7 @@ cmp.threshold #=> 0.05 
     | 
|
| 
       74 
87 
     | 
    
         
             
            cmp = ImageCompare::Matcher.new lower_threshold: 0.01
         
     | 
| 
       75 
88 
     | 
    
         
             
            cmp.lower_threshold #=> 0.01
         
     | 
| 
       76 
89 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
            #  
     | 
| 
      
 90 
     | 
    
         
            +
            # Create zero-tolerance grayscale matcher
         
     | 
| 
       78 
91 
     | 
    
         
             
            cmp = ImageCompare::Matcher.new mode: :grayscale, tolerance: 0
         
     | 
| 
       79 
92 
     | 
    
         
             
            cmp.mode #=> ImageCompare::Modes::Grayscale
         
     | 
| 
       80 
93 
     | 
    
         | 
| 
         @@ -103,9 +116,58 @@ You can exclude rectangle from comparing by passing `:exclude_rect` to `compare` 
     | 
|
| 
       103 
116 
     | 
    
         
             
            E.g., if `path_1` and `path_2` contain images above
         
     | 
| 
       104 
117 
     | 
    
         
             
            ```ruby
         
     | 
| 
       105 
118 
     | 
    
         
             
            ImageCompare.compare(path_1, path_2, exclude_rect: [200, 150, 275, 200]).match? # => true
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            # or
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
            cmp = ImageCompare::Matcher.new exclude_rect: [200, 150, 275, 200]
         
     | 
| 
      
 123 
     | 
    
         
            +
            res = cmp.compare(path_1, path_2)
         
     | 
| 
      
 124 
     | 
    
         
            +
            res #=> ImageCompare::Result
         
     | 
| 
      
 125 
     | 
    
         
            +
            res.match? #=> true
         
     | 
| 
      
 126 
     | 
    
         
            +
            res.score #=> 0.0
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
            # Return diff image object
         
     | 
| 
      
 129 
     | 
    
         
            +
            res.difference_image #=> ImageCompare::Image
         
     | 
| 
      
 130 
     | 
    
         
            +
            res.difference_image.save(new_path)
         
     | 
| 
       106 
131 
     | 
    
         
             
            ```
         
     | 
| 
       107 
132 
     | 
    
         
             
            `[200, 150, 275, 200]` is array of two vertices of rectangle -- (200, 150) is left-top vertex and (275, 200) is right-bottom.
         
     | 
| 
       108 
133 
     | 
    
         | 
| 
      
 134 
     | 
    
         
            +
            ### Cucumber + Capybara example
         
     | 
| 
      
 135 
     | 
    
         
            +
            `support/env.rb`:
         
     | 
| 
      
 136 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 137 
     | 
    
         
            +
            require 'image_compare'
         
     | 
| 
      
 138 
     | 
    
         
            +
            ```
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            `support/capybara_extensions.rb`:
         
     | 
| 
      
 141 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 142 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
            Capybara::Node::Element.class_eval do
         
     | 
| 
      
 145 
     | 
    
         
            +
              def rect_area
         
     | 
| 
      
 146 
     | 
    
         
            +
                rect_area = self.evaluate_script('this.getBoundingClientRect()')
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                [
         
     | 
| 
      
 149 
     | 
    
         
            +
                  rect_area['left'].to_f.round,
         
     | 
| 
      
 150 
     | 
    
         
            +
                  rect_area['top'].to_f.round,
         
     | 
| 
      
 151 
     | 
    
         
            +
                  rect_area['right'].to_f.round,
         
     | 
| 
      
 152 
     | 
    
         
            +
                  rect_area['bottom'].to_f.round
         
     | 
| 
      
 153 
     | 
    
         
            +
                ]
         
     | 
| 
      
 154 
     | 
    
         
            +
              rescue StandardError => e
         
     | 
| 
      
 155 
     | 
    
         
            +
                raise "Error getting element rect area: #{e.inspect}!"
         
     | 
| 
      
 156 
     | 
    
         
            +
              end
         
     | 
| 
      
 157 
     | 
    
         
            +
            end
         
     | 
| 
      
 158 
     | 
    
         
            +
            ```
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
            `steps/my_step.rb`:
         
     | 
| 
      
 161 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 162 
     | 
    
         
            +
            my_element = page.find('#my_element').rect_area
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
            cmp = ImageCompare::Matcher.new exclude_rect: my_element.rect_area
         
     | 
| 
      
 165 
     | 
    
         
            +
            res = cmp.compare(path_1, path_2)
         
     | 
| 
      
 166 
     | 
    
         
            +
            res.difference_image.save(new_path)
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
            expect(res.match?).to eq(true)
         
     | 
| 
      
 169 
     | 
    
         
            +
            ```
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
       109 
171 
     | 
    
         
             
            ## Including rectangle
         
     | 
| 
       110 
172 
     | 
    
         | 
| 
       111 
173 
     | 
    
         
             
            You can set bounds of comparing by passing `:include_rect` to `compare` with array similar to previous example
         
     | 
| 
         @@ -16,7 +16,7 @@ module ImageCompare 
     | 
|
| 
       16 
16 
     | 
    
         
             
                attr_reader :mode
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                def initialize(**options)
         
     | 
| 
       19 
     | 
    
         
            -
                  mode_type = options.delete(:mode) || : 
     | 
| 
      
 19 
     | 
    
         
            +
                  mode_type = options.delete(:mode) || :color
         
     | 
| 
       20 
20 
     | 
    
         
             
                  raise ArgumentError, "Undefined mode: #{mode_type}" unless MODES.key?(mode_type)
         
     | 
| 
       21 
21 
     | 
    
         
             
                  @mode = Modes.const_get(MODES[mode_type]).new(**options)
         
     | 
| 
       22 
22 
     | 
    
         
             
                end
         
     | 
    
        data/lib/image_compare/modes.rb
    CHANGED
    
    | 
         @@ -2,9 +2,9 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module ImageCompare
         
     | 
| 
       4 
4 
     | 
    
         
             
              module Modes
         
     | 
| 
       5 
     | 
    
         
            -
                require 'image_compare/modes/rgb'
         
     | 
| 
       6 
     | 
    
         
            -
                require 'image_compare/modes/grayscale'
         
     | 
| 
       7 
     | 
    
         
            -
                require 'image_compare/modes/delta'
         
     | 
| 
       8 
5 
     | 
    
         
             
                require 'image_compare/modes/color'
         
     | 
| 
      
 6 
     | 
    
         
            +
                require 'image_compare/modes/delta'
         
     | 
| 
      
 7 
     | 
    
         
            +
                require 'image_compare/modes/grayscale'
         
     | 
| 
      
 8 
     | 
    
         
            +
                require 'image_compare/modes/rgb'
         
     | 
| 
       9 
9 
     | 
    
         
             
              end
         
     | 
| 
       10 
10 
     | 
    
         
             
            end
         
     | 
    
        data/lib/image_compare.rb
    CHANGED
    
    | 
         @@ -6,8 +6,8 @@ module ImageCompare 
     | 
|
| 
       6 
6 
     | 
    
         
             
              class SizesMismatchError < StandardError
         
     | 
| 
       7 
7 
     | 
    
         
             
              end
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
              require 'image_compare/matcher'
         
     | 
| 
       10 
9 
     | 
    
         
             
              require 'image_compare/color_methods'
         
     | 
| 
      
 10 
     | 
    
         
            +
              require 'image_compare/matcher'
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
              def self.compare(path_a, path_b, **options)
         
     | 
| 
       13 
13 
     | 
    
         
             
                Matcher.new(**options).compare(path_a, path_b)
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: image_compare
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - cristianofmc
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2023-03- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2023-03-27 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: chunky_png
         
     | 
| 
         @@ -99,9 +99,9 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       99 
99 
     | 
    
         
             
                  version: 3.2.0
         
     | 
| 
       100 
100 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       101 
101 
     | 
    
         
             
              requirements:
         
     | 
| 
       102 
     | 
    
         
            -
              - - " 
     | 
| 
      
 102 
     | 
    
         
            +
              - - ">="
         
     | 
| 
       103 
103 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       104 
     | 
    
         
            -
                  version:  
     | 
| 
      
 104 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
       105 
105 
     | 
    
         
             
            requirements: []
         
     | 
| 
       106 
106 
     | 
    
         
             
            rubygems_version: 3.4.1
         
     | 
| 
       107 
107 
     | 
    
         
             
            signing_key: 
         
     |