image_comparator 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 03b711e4ffa78e8918e5f17275f02b437cfb6eda
4
+ data.tar.gz: 9f108a034b40f53ea91cad71f9c24d8bc6098433
5
+ SHA512:
6
+ metadata.gz: fdc1f9157e00563110542a1cb140ddffe1dc6791fb0493ecadd091f15dd046bab0ae303388e450cec94a6a265a019853e2d7dcfd94cd0837e691a8628720e86f
7
+ data.tar.gz: 56f5167dd68479cbdeb22d69af135284b68303e5c7d05f38bde6945d1c6bf9005fd712e14682ef51176188ef516d8f93ea8c30472981996ec2f3b4ada6f06365
@@ -0,0 +1,5 @@
1
+ /coverage/
2
+ /tmp/
3
+ .idea
4
+ .yardoc
5
+ *.gem
@@ -0,0 +1,32 @@
1
+ # Image Comparator
2
+
3
+ The objective of this small project is to provide a simple api to compare 2 png images.
4
+
5
+ It provide the following features:
6
+
7
+ * Image comparison pixel to pixel.
8
+ * Possibility to focus comparison to specific areas or remove areas from the comparison.
9
+ * Possibility to obtain an image with the differences found.
10
+
11
+ ## How to install
12
+
13
+ ```
14
+ gem install image_comparator
15
+ ```
16
+
17
+ ## Examples
18
+
19
+ ```
20
+ require 'image_comparator'
21
+
22
+ image_comparator = ImageComparator.new
23
+ image_comparator.define_images_to_compare('./images/almost-the-same-1.png', './images/almost-the-same-2.png')
24
+ image_comparator.compare
25
+ ```
26
+
27
+ See unit tests to see more examples and documentation
28
+
29
+ ## How to generate the documentation
30
+
31
+ 1. Clone the project
32
+ 2.
@@ -0,0 +1,9 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.pattern = 'test/*.rb'
5
+ end
6
+
7
+ desc "Run tests"
8
+ task :default => :test
9
+
@@ -0,0 +1,802 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>
7
+ Class: ImageComparator
8
+
9
+ &mdash; Documentation by YARD 0.8.7.6
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ hasFrames = window.top.frames.main ? true : false;
19
+ relpath = '';
20
+ framesUrl = "frames.html#!ImageComparator.html";
21
+ </script>
22
+
23
+
24
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
25
+
26
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
27
+
28
+
29
+ </head>
30
+ <body>
31
+ <div id="header">
32
+ <div id="menu">
33
+
34
+ <a href="_index.html">Index (I)</a> &raquo;
35
+
36
+
37
+ <span class="title">ImageComparator</span>
38
+
39
+
40
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
+ </div>
42
+
43
+ <div id="search">
44
+
45
+ <a class="full_list_link" id="class_list_link"
46
+ href="class_list.html">
47
+ Class List
48
+ </a>
49
+
50
+ <a class="full_list_link" id="method_list_link"
51
+ href="method_list.html">
52
+ Method List
53
+ </a>
54
+
55
+ <a class="full_list_link" id="file_list_link"
56
+ href="file_list.html">
57
+ File List
58
+ </a>
59
+
60
+ </div>
61
+ <div class="clear"></div>
62
+ </div>
63
+
64
+ <iframe id="search_frame"></iframe>
65
+
66
+ <div id="content"><h1>Class: ImageComparator
67
+
68
+
69
+
70
+ </h1>
71
+
72
+ <dl class="box">
73
+
74
+ <dt class="r1">Inherits:</dt>
75
+ <dd class="r1">
76
+ <span class="inheritName">Object</span>
77
+
78
+ <ul class="fullTree">
79
+ <li>Object</li>
80
+
81
+ <li class="next">ImageComparator</li>
82
+
83
+ </ul>
84
+ <a href="#" class="inheritanceTree">show all</a>
85
+
86
+ </dd>
87
+
88
+
89
+
90
+
91
+
92
+
93
+ <dt class="r2">Includes:</dt>
94
+ <dd class="r2">ChunkyPNG::Color</dd>
95
+
96
+
97
+
98
+
99
+
100
+ <dt class="r1 last">Defined in:</dt>
101
+ <dd class="r1 last">image_comparator.rb</dd>
102
+
103
+ </dl>
104
+ <div class="clear"></div>
105
+
106
+
107
+ <h2>Constant Summary</h2>
108
+
109
+ <dl class="constants">
110
+
111
+ <dt id="LOG_FILE-constant" class="">LOG_FILE =
112
+
113
+ </dt>
114
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./tmp/log_file.log</span><span class='tstring_end'>&#39;</span></span></pre></dd>
115
+
116
+ <dt id="LOG_ROTATE_PERIOCITY-constant" class="">LOG_ROTATE_PERIOCITY =
117
+
118
+ </dt>
119
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>monthly</span><span class='tstring_end'>&#39;</span></span></pre></dd>
120
+
121
+ <dt id="DEFAULT_TEMP_FOLDER-constant" class="">DEFAULT_TEMP_FOLDER =
122
+
123
+ </dt>
124
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./tmp</span><span class='tstring_end'>&#39;</span></span></pre></dd>
125
+
126
+ <dt id="DEFAULT_FILE1_NAME-constant" class="">DEFAULT_FILE1_NAME =
127
+
128
+ </dt>
129
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>file1.png</span><span class='tstring_end'>&#39;</span></span></pre></dd>
130
+
131
+ <dt id="DEFAULT_FILE2_NAME-constant" class="">DEFAULT_FILE2_NAME =
132
+
133
+ </dt>
134
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>file2.png</span><span class='tstring_end'>&#39;</span></span></pre></dd>
135
+
136
+ </dl>
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+ <h2>
147
+ Instance Method Summary
148
+ <small>(<a href="#" class="summary_toggle">collapse</a>)</small>
149
+ </h2>
150
+
151
+ <ul class="summary">
152
+
153
+ <li class="public ">
154
+ <span class="summary_signature">
155
+
156
+ <a href="#calculate_diff_image-instance_method" title="#calculate_diff_image (instance method)">- (String) <strong>calculate_diff_image</strong>(path_res = &#39;./diff.png&#39;) </a>
157
+
158
+
159
+
160
+ </span>
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+ <span class="summary_desc"><div class='inline'>
171
+ <p>This method generates a png with the image differences and returns a
172
+ fingerprint of the returned image.</p>
173
+ </div></span>
174
+
175
+ </li>
176
+
177
+
178
+ <li class="public ">
179
+ <span class="summary_signature">
180
+
181
+ <a href="#equal-instance_method" title="#equal (instance method)">- (Boolean) <strong>equal</strong> </a>
182
+
183
+
184
+
185
+ </span>
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+ <span class="summary_desc"><div class='inline'>
196
+ <p>This method return a boolean to indicate if 2 png images are equal from a
197
+ pixel point of view.</p>
198
+ </div></span>
199
+
200
+ </li>
201
+
202
+
203
+ <li class="public ">
204
+ <span class="summary_signature">
205
+
206
+ <a href="#equal_and_generate_diff-instance_method" title="#equal_and_generate_diff (instance method)">- (Boolean) <strong>equal_and_generate_diff</strong>(path_res = &#39;./diff.png&#39;) </a>
207
+
208
+
209
+
210
+ </span>
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+ <span class="summary_desc"><div class='inline'>
221
+ <p>This method returns a boolean to indicate if the 2 images are equal, based
222
+ on the threshold, and in case they are not, a png with the differences is
223
+ generated.</p>
224
+ </div></span>
225
+
226
+ </li>
227
+
228
+
229
+ <li class="public ">
230
+ <span class="summary_signature">
231
+
232
+ <a href="#initialize-instance_method" title="#initialize (instance method)">- (ImageComparator) <strong>initialize</strong>(path_image1, path_image2) </a>
233
+
234
+
235
+
236
+ </span>
237
+
238
+
239
+ <span class="note title constructor">constructor</span>
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+ <span class="summary_desc"><div class='inline'>
249
+ <p>Class constructor.</p>
250
+ </div></span>
251
+
252
+ </li>
253
+
254
+
255
+ <li class="public ">
256
+ <span class="summary_signature">
257
+
258
+ <a href="#set_areas-instance_method" title="#set_areas (instance method)">- (Object) <strong>set_areas</strong>(areas) </a>
259
+
260
+
261
+
262
+ </span>
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+ <span class="summary_desc"><div class='inline'>
273
+ <p>This method defines the areas that will be used on the comparison methods,
274
+ ie: equal, calculate_diff_image and equal_and_generate_diff methods.</p>
275
+ </div></span>
276
+
277
+ </li>
278
+
279
+
280
+ </ul>
281
+
282
+
283
+
284
+ <div id="constructor_details" class="method_details_list">
285
+ <h2>Constructor Details</h2>
286
+
287
+ <div class="method_details first">
288
+ <h3 class="signature first" id="initialize-instance_method">
289
+
290
+ - (<tt><span class='object_link'><a href="" title="ImageComparator (class)">ImageComparator</a></span></tt>) <strong>initialize</strong>(path_image1, path_image2)
291
+
292
+
293
+
294
+
295
+
296
+ </h3><div class="docstring">
297
+ <div class="discussion">
298
+
299
+ <p>Class constructor</p>
300
+
301
+
302
+ </div>
303
+ </div>
304
+ <div class="tags">
305
+ <p class="tag_title">Parameters:</p>
306
+ <ul class="param">
307
+
308
+ <li>
309
+
310
+ <span class='name'>path_image1</span>
311
+
312
+
313
+ <span class='type'>(<tt>String</tt>)</span>
314
+
315
+
316
+
317
+ &mdash;
318
+ <div class='inline'>
319
+ <p>The path to the first image to compare.</p>
320
+ </div>
321
+
322
+ </li>
323
+
324
+ <li>
325
+
326
+ <span class='name'>path_image2</span>
327
+
328
+
329
+ <span class='type'>(<tt>String</tt>)</span>
330
+
331
+
332
+
333
+ &mdash;
334
+ <div class='inline'>
335
+ <p>The path to the second image to compare.</p>
336
+ </div>
337
+
338
+ </li>
339
+
340
+ </ul>
341
+
342
+
343
+ </div><table class="source_code">
344
+ <tr>
345
+ <td>
346
+ <pre class="lines">
347
+
348
+
349
+ 23
350
+ 24
351
+ 25
352
+ 26
353
+ 27
354
+ 28
355
+ 29</pre>
356
+ </td>
357
+ <td>
358
+ <pre class="code"><span class="info file"># File 'image_comparator.rb', line 23</span>
359
+
360
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_path_image1'>path_image1</span><span class='comma'>,</span> <span class='id identifier rubyid_path_image2'>path_image2</span><span class='rparen'>)</span>
361
+ <span class='ivar'>@logger</span> <span class='op'>=</span> <span class='const'>Logger</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='const'>LOG_FILE</span><span class='comma'>,</span> <span class='const'>LOG_ROTATE_PERIOCITY</span><span class='rparen'>)</span>
362
+ <span class='ivar'>@logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>in: initialize(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_path_image1'>path_image1</span><span class='embexpr_end'>}</span><span class='tstring_content'>, </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_path_image2'>path_image2</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
363
+ <span class='ivar'>@areas</span> <span class='op'>=</span> <span class='kw'>nil</span>
364
+ <span class='ivar'>@path_image1</span> <span class='op'>=</span> <span class='id identifier rubyid_path_image1'>path_image1</span>
365
+ <span class='ivar'>@path_image2</span> <span class='op'>=</span> <span class='id identifier rubyid_path_image2'>path_image2</span>
366
+ <span class='kw'>end</span></pre>
367
+ </td>
368
+ </tr>
369
+ </table>
370
+ </div>
371
+
372
+ </div>
373
+
374
+
375
+ <div id="instance_method_details" class="method_details_list">
376
+ <h2>Instance Method Details</h2>
377
+
378
+
379
+ <div class="method_details first">
380
+ <h3 class="signature first" id="calculate_diff_image-instance_method">
381
+
382
+ - (<tt>String</tt>) <strong>calculate_diff_image</strong>(path_res = &#39;./diff.png&#39;)
383
+
384
+
385
+
386
+
387
+
388
+ </h3><div class="docstring">
389
+ <div class="discussion">
390
+
391
+ <p>This method generates a png with the image differences and returns a
392
+ fingerprint of the returned image.</p>
393
+
394
+ <p>If areas are defined, they will be used on the comparison. See
395
+ <span class='object_link'><a href="#set_areas-instance_method" title="ImageComparator#set_areas (method)">#set_areas</a></span></p>
396
+
397
+
398
+ </div>
399
+ </div>
400
+ <div class="tags">
401
+ <p class="tag_title">Parameters:</p>
402
+ <ul class="param">
403
+
404
+ <li>
405
+
406
+ <span class='name'>path_res</span>
407
+
408
+
409
+ <span class='type'>(<tt>String</tt>)</span>
410
+
411
+
412
+ <em class="default">(defaults to: <tt>&#39;./diff.png&#39;</tt>)</em>
413
+
414
+
415
+ &mdash;
416
+ <div class='inline'>
417
+ <p>(Optional, by default ./diff.png) It defines where the png file with the
418
+ differences will be placed.</p>
419
+ </div>
420
+
421
+ </li>
422
+
423
+ </ul>
424
+
425
+ <p class="tag_title">Returns:</p>
426
+ <ul class="return">
427
+
428
+ <li>
429
+
430
+
431
+ <span class='type'>(<tt>String</tt>)</span>
432
+
433
+
434
+
435
+ &mdash;
436
+ <div class='inline'>
437
+ <p>It generates a png with the image differences and returns a fingerprint of
438
+ the returned image</p>
439
+ </div>
440
+
441
+ </li>
442
+
443
+ </ul>
444
+
445
+ </div><table class="source_code">
446
+ <tr>
447
+ <td>
448
+ <pre class="lines">
449
+
450
+
451
+ 48
452
+ 49
453
+ 50
454
+ 51
455
+ 52
456
+ 53
457
+ 54
458
+ 55
459
+ 56
460
+ 57
461
+ 58
462
+ 59
463
+ 60
464
+ 61
465
+ 62
466
+ 63
467
+ 64
468
+ 65
469
+ 66
470
+ 67
471
+ 68
472
+ 69
473
+ 70
474
+ 71
475
+ 72
476
+ 73
477
+ 74
478
+ 75
479
+ 76
480
+ 77
481
+ 78
482
+ 79
483
+ 80
484
+ 81
485
+ 82
486
+ 83
487
+ 84
488
+ 85</pre>
489
+ </td>
490
+ <td>
491
+ <pre class="code"><span class="info file"># File 'image_comparator.rb', line 48</span>
492
+
493
+ <span class='kw'>def</span> <span class='id identifier rubyid_calculate_diff_image'>calculate_diff_image</span><span class='lparen'>(</span><span class='id identifier rubyid_path_res'>path_res</span><span class='op'>=</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./diff.png</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
494
+ <span class='ivar'>@logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>in: calculate_diff_image (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_path_res'>path_res</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
495
+ <span class='kw'>begin</span>
496
+ <span class='id identifier rubyid_p_image1'>p_image1</span> <span class='op'>=</span> <span class='ivar'>@path_image1</span>
497
+ <span class='id identifier rubyid_p_image2'>p_image2</span> <span class='op'>=</span> <span class='ivar'>@path_image2</span>
498
+
499
+ <span class='kw'>unless</span> <span class='ivar'>@areas</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
500
+ <span class='id identifier rubyid_prepare_areas_on_files'>prepare_areas_on_files</span>
501
+ <span class='id identifier rubyid_p_image1'>p_image1</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='const'>DEFAULT_TEMP_FOLDER</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='const'>DEFAULT_FILE1_NAME</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
502
+ <span class='id identifier rubyid_p_image2'>p_image2</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='const'>DEFAULT_TEMP_FOLDER</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='const'>DEFAULT_FILE2_NAME</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
503
+ <span class='kw'>end</span>
504
+
505
+ <span class='id identifier rubyid_images'>images</span> <span class='op'>=</span> <span class='lbracket'>[</span>
506
+ <span class='const'>ChunkyPNG</span><span class='op'>::</span><span class='const'>Image</span><span class='period'>.</span><span class='id identifier rubyid_from_file'>from_file</span><span class='lparen'>(</span><span class='id identifier rubyid_p_image1'>p_image1</span><span class='rparen'>)</span><span class='comma'>,</span>
507
+ <span class='const'>ChunkyPNG</span><span class='op'>::</span><span class='const'>Image</span><span class='period'>.</span><span class='id identifier rubyid_from_file'>from_file</span><span class='lparen'>(</span><span class='id identifier rubyid_p_image2'>p_image2</span><span class='rparen'>)</span>
508
+ <span class='rbracket'>]</span>
509
+
510
+ <span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_height'>height</span><span class='period'>.</span><span class='id identifier rubyid_times'>times</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_y'>y</span><span class='op'>|</span>
511
+ <span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_row'>row</span><span class='lparen'>(</span><span class='id identifier rubyid_y'>y</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each_with_index'>each_with_index</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_pixel'>pixel</span><span class='comma'>,</span> <span class='id identifier rubyid_x'>x</span><span class='op'>|</span>
512
+
513
+ <span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='lbracket'>[</span><span class='id identifier rubyid_x'>x</span><span class='comma'>,</span><span class='id identifier rubyid_y'>y</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_rgb'>rgb</span><span class='lparen'>(</span>
514
+ <span class='id identifier rubyid_r'>r</span><span class='lparen'>(</span><span class='id identifier rubyid_pixel'>pixel</span><span class='rparen'>)</span> <span class='op'>+</span> <span class='id identifier rubyid_r'>r</span><span class='lparen'>(</span><span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='lbracket'>[</span><span class='id identifier rubyid_x'>x</span><span class='comma'>,</span><span class='id identifier rubyid_y'>y</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='op'>-</span> <span class='int'>2</span> <span class='op'>*</span> <span class='lbracket'>[</span><span class='id identifier rubyid_r'>r</span><span class='lparen'>(</span><span class='id identifier rubyid_pixel'>pixel</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_r'>r</span><span class='lparen'>(</span><span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='lbracket'>[</span><span class='id identifier rubyid_x'>x</span><span class='comma'>,</span><span class='id identifier rubyid_y'>y</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_min'>min</span><span class='comma'>,</span>
515
+ <span class='id identifier rubyid_g'>g</span><span class='lparen'>(</span><span class='id identifier rubyid_pixel'>pixel</span><span class='rparen'>)</span> <span class='op'>+</span> <span class='id identifier rubyid_g'>g</span><span class='lparen'>(</span><span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='lbracket'>[</span><span class='id identifier rubyid_x'>x</span><span class='comma'>,</span><span class='id identifier rubyid_y'>y</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='op'>-</span> <span class='int'>2</span> <span class='op'>*</span> <span class='lbracket'>[</span><span class='id identifier rubyid_g'>g</span><span class='lparen'>(</span><span class='id identifier rubyid_pixel'>pixel</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_g'>g</span><span class='lparen'>(</span><span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='lbracket'>[</span><span class='id identifier rubyid_x'>x</span><span class='comma'>,</span><span class='id identifier rubyid_y'>y</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_min'>min</span><span class='comma'>,</span>
516
+ <span class='id identifier rubyid_b'>b</span><span class='lparen'>(</span><span class='id identifier rubyid_pixel'>pixel</span><span class='rparen'>)</span> <span class='op'>+</span> <span class='id identifier rubyid_b'>b</span><span class='lparen'>(</span><span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='lbracket'>[</span><span class='id identifier rubyid_x'>x</span><span class='comma'>,</span><span class='id identifier rubyid_y'>y</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='op'>-</span> <span class='int'>2</span> <span class='op'>*</span> <span class='lbracket'>[</span><span class='id identifier rubyid_b'>b</span><span class='lparen'>(</span><span class='id identifier rubyid_pixel'>pixel</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_b'>b</span><span class='lparen'>(</span><span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='lbracket'>[</span><span class='id identifier rubyid_x'>x</span><span class='comma'>,</span><span class='id identifier rubyid_y'>y</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_min'>min</span>
517
+ <span class='rparen'>)</span>
518
+ <span class='kw'>end</span>
519
+ <span class='kw'>end</span>
520
+ <span class='id identifier rubyid_images'>images</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_save'>save</span><span class='lparen'>(</span><span class='id identifier rubyid_path_res'>path_res</span><span class='rparen'>)</span>
521
+ <span class='id identifier rubyid_diff_fingerprint'>diff_fingerprint</span> <span class='op'>=</span> <span class='const'>Phashion</span><span class='op'>::</span><span class='const'>Image</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_path_res'>path_res</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fingerprint'>fingerprint</span>
522
+ <span class='ivar'>@logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>out: calculate_diff_image (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_path_res'>path_res</span><span class='embexpr_end'>}</span><span class='tstring_content'>) - ret: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_diff_fingerprint'>diff_fingerprint</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
523
+ <span class='id identifier rubyid_diff_fingerprint'>diff_fingerprint</span>
524
+ <span class='kw'>rescue</span> <span class='const'>StandardError</span>
525
+ <span class='ivar'>@logger</span><span class='period'>.</span><span class='id identifier rubyid_error'>error</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>There was a problem</span><span class='tstring_end'>&#39;</span></span>
526
+ <span class='id identifier rubyid_raise'>raise</span>
527
+ <span class='kw'>ensure</span>
528
+ <span class='id identifier rubyid_delete_temp_images'>delete_temp_images</span>
529
+ <span class='kw'>end</span>
530
+ <span class='kw'>end</span></pre>
531
+ </td>
532
+ </tr>
533
+ </table>
534
+ </div>
535
+
536
+ <div class="method_details ">
537
+ <h3 class="signature " id="equal-instance_method">
538
+
539
+ - (<tt>Boolean</tt>) <strong>equal</strong>
540
+
541
+
542
+
543
+
544
+
545
+ </h3><div class="docstring">
546
+ <div class="discussion">
547
+
548
+ <p>This method return a boolean to indicate if 2 png images are equal from a
549
+ pixel point of view.</p>
550
+
551
+ <p>If areas are defined, they will be used on the comparison. See
552
+ <span class='object_link'><a href="#set_areas-instance_method" title="ImageComparator#set_areas (method)">#set_areas</a></span></p>
553
+
554
+
555
+ </div>
556
+ </div>
557
+ <div class="tags">
558
+
559
+ <p class="tag_title">Returns:</p>
560
+ <ul class="return">
561
+
562
+ <li>
563
+
564
+
565
+ <span class='type'>(<tt>Boolean</tt>)</span>
566
+
567
+
568
+
569
+ &mdash;
570
+ <div class='inline'>
571
+ <p>True if the 2 images are equal, otherwise false.</p>
572
+ </div>
573
+
574
+ </li>
575
+
576
+ </ul>
577
+
578
+ </div><table class="source_code">
579
+ <tr>
580
+ <td>
581
+ <pre class="lines">
582
+
583
+
584
+ 36
585
+ 37
586
+ 38</pre>
587
+ </td>
588
+ <td>
589
+ <pre class="code"><span class="info file"># File 'image_comparator.rb', line 36</span>
590
+
591
+ <span class='kw'>def</span> <span class='id identifier rubyid_equal'>equal</span><span class='lparen'>(</span><span class='rparen'>)</span>
592
+ <span class='id identifier rubyid_equal_pixel_perfect'>equal_pixel_perfect</span><span class='lparen'>(</span><span class='rparen'>)</span>
593
+ <span class='kw'>end</span></pre>
594
+ </td>
595
+ </tr>
596
+ </table>
597
+ </div>
598
+
599
+ <div class="method_details ">
600
+ <h3 class="signature " id="equal_and_generate_diff-instance_method">
601
+
602
+ - (<tt>Boolean</tt>) <strong>equal_and_generate_diff</strong>(path_res = &#39;./diff.png&#39;)
603
+
604
+
605
+
606
+
607
+
608
+ </h3><div class="docstring">
609
+ <div class="discussion">
610
+
611
+ <p>This method returns a boolean to indicate if the 2 images are equal, based
612
+ on the threshold, and in case they are not, a png with the differences is
613
+ generated.</p>
614
+
615
+ <p>If areas are defined, they will be used on the comparison. See
616
+ <span class='object_link'><a href="#set_areas-instance_method" title="ImageComparator#set_areas (method)">#set_areas</a></span></p>
617
+
618
+
619
+ </div>
620
+ </div>
621
+ <div class="tags">
622
+ <p class="tag_title">Parameters:</p>
623
+ <ul class="param">
624
+
625
+ <li>
626
+
627
+ <span class='name'>path_res</span>
628
+
629
+
630
+ <span class='type'>(<tt>String</tt>)</span>
631
+
632
+
633
+ <em class="default">(defaults to: <tt>&#39;./diff.png&#39;</tt>)</em>
634
+
635
+
636
+ &mdash;
637
+ <div class='inline'>
638
+ <p>(Optional, by default ./diff.png) It defines where the png file with the
639
+ differences will be placed.</p>
640
+ </div>
641
+
642
+ </li>
643
+
644
+ </ul>
645
+
646
+ <p class="tag_title">Returns:</p>
647
+ <ul class="return">
648
+
649
+ <li>
650
+
651
+
652
+ <span class='type'>(<tt>Boolean</tt>)</span>
653
+
654
+
655
+
656
+ &mdash;
657
+ <div class='inline'>
658
+ <p>True if the 2 images are equal, otherwise false. In case of being false a
659
+ png image with the differences is generated.</p>
660
+ </div>
661
+
662
+ </li>
663
+
664
+ </ul>
665
+
666
+ </div><table class="source_code">
667
+ <tr>
668
+ <td>
669
+ <pre class="lines">
670
+
671
+
672
+ 97
673
+ 98
674
+ 99
675
+ 100
676
+ 101
677
+ 102
678
+ 103</pre>
679
+ </td>
680
+ <td>
681
+ <pre class="code"><span class="info file"># File 'image_comparator.rb', line 97</span>
682
+
683
+ <span class='kw'>def</span> <span class='id identifier rubyid_equal_and_generate_diff'>equal_and_generate_diff</span><span class='lparen'>(</span><span class='id identifier rubyid_path_res'>path_res</span><span class='op'>=</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./diff.png</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
684
+ <span class='ivar'>@logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>in:equal_and_generate_diff(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_path_res'>path_res</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
685
+ <span class='id identifier rubyid_images_equals'>images_equals</span> <span class='op'>=</span> <span class='id identifier rubyid_equal'>equal</span><span class='lparen'>(</span><span class='rparen'>)</span>
686
+ <span class='id identifier rubyid_calculate_diff_image'>calculate_diff_image</span><span class='lparen'>(</span><span class='id identifier rubyid_path_res'>path_res</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_images_equals'>images_equals</span>
687
+ <span class='ivar'>@logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>out:equal_and_generate_diff(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_path_res'>path_res</span><span class='embexpr_end'>}</span><span class='tstring_content'> - ret: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_images_equals'>images_equals</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
688
+ <span class='id identifier rubyid_images_equals'>images_equals</span>
689
+ <span class='kw'>end</span></pre>
690
+ </td>
691
+ </tr>
692
+ </table>
693
+ </div>
694
+
695
+ <div class="method_details ">
696
+ <h3 class="signature " id="set_areas-instance_method">
697
+
698
+ - (<tt>Object</tt>) <strong>set_areas</strong>(areas)
699
+
700
+
701
+
702
+
703
+
704
+ </h3><div class="docstring">
705
+ <div class="discussion">
706
+
707
+ <p>This method defines the areas that will be used on the comparison methods,
708
+ ie: equal, calculate_diff_image and equal_and_generate_diff methods.</p>
709
+
710
+ <p>The comparison methods will only focus the comparison on the areas flagged
711
+ as included and will ignore the ones marked as exclude.</p>
712
+
713
+ <p>If the areas are defined, the comparison methods first create a temporal
714
+ image for each image to compare with only the areas that will be included
715
+ (if there is any) and then will remove from this image the excluded images
716
+ (if any). This temporal images will be used on the comparison.</p>
717
+
718
+
719
+ </div>
720
+ </div>
721
+ <div class="tags">
722
+
723
+ <div class="examples">
724
+ <p class="tag_title">Examples:</p>
725
+
726
+
727
+ <p class="example_title"><div class='inline'>
728
+ <p>Here you can see an example of areas.</p>
729
+ </div></p>
730
+
731
+ <pre class="example code"><code><span class='id identifier rubyid_origin_coord'>origin_coord</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>x</span><span class='label_end'>&#39;:</span><span class='int'>828</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>y</span><span class='label_end'>&#39;:</span><span class='int'>293</span><span class='rbrace'>}</span>
732
+ <span class='id identifier rubyid_end_coord'>end_coord</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>x</span><span class='label_end'>&#39;:</span><span class='int'>1173</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>y</span><span class='label_end'>&#39;:</span><span class='int'>688</span><span class='rbrace'>}</span>
733
+ <span class='id identifier rubyid_area1'>area1</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>origin</span><span class='label_end'>&#39;:</span> <span class='id identifier rubyid_origin_coord'>origin_coord</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>end</span><span class='label_end'>&#39;:</span> <span class='id identifier rubyid_end_coord'>end_coord</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>exclude</span><span class='label_end'>&#39;:</span> <span class='kw'>false</span><span class='rbrace'>}</span>
734
+ <span class='id identifier rubyid_origin_coord2'>origin_coord2</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>x</span><span class='label_end'>&#39;:</span><span class='int'>0</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>y</span><span class='label_end'>&#39;:</span><span class='int'>0</span><span class='rbrace'>}</span>
735
+ <span class='id identifier rubyid_end_coord2'>end_coord2</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>x</span><span class='label_end'>&#39;:</span><span class='int'>828</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>y</span><span class='label_end'>&#39;:</span><span class='int'>293</span><span class='rbrace'>}</span>
736
+ <span class='id identifier rubyid_area2'>area2</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>origin</span><span class='label_end'>&#39;:</span> <span class='id identifier rubyid_origin_coord2'>origin_coord2</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>end</span><span class='label_end'>&#39;:</span> <span class='id identifier rubyid_end_coord2'>end_coord2</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>exclude</span><span class='label_end'>&#39;:</span> <span class='kw'>true</span><span class='rbrace'>}</span>
737
+ <span class='id identifier rubyid_areas'>areas</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_area1'>area1</span><span class='comma'>,</span> <span class='id identifier rubyid_area2'>area2</span><span class='rbracket'>]</span></code></pre>
738
+
739
+ </div>
740
+ <p class="tag_title">Parameters:</p>
741
+ <ul class="param">
742
+
743
+ <li>
744
+
745
+ <span class='name'>areas</span>
746
+
747
+
748
+ <span class='type'>(<tt>Array&lt;Symbol&gt;</tt>)</span>
749
+
750
+
751
+
752
+ &mdash;
753
+ <div class='inline'>
754
+ <p>This is an array of areas to include or exclude on the comparison methods.
755
+ It has the following format:</p>
756
+
757
+ <p>areas = [area1, …, areaN]</p>
758
+
759
+ <p>areaX = &#39;end&#39;: point, &#39;exclude&#39;:
760
+ boolean</p>
761
+
762
+ <p>point = integer, &#39;y&#39;: integer</p>
763
+ </div>
764
+
765
+ </li>
766
+
767
+ </ul>
768
+
769
+
770
+ </div><table class="source_code">
771
+ <tr>
772
+ <td>
773
+ <pre class="lines">
774
+
775
+
776
+ 133
777
+ 134
778
+ 135</pre>
779
+ </td>
780
+ <td>
781
+ <pre class="code"><span class="info file"># File 'image_comparator.rb', line 133</span>
782
+
783
+ <span class='kw'>def</span> <span class='id identifier rubyid_set_areas'>set_areas</span><span class='lparen'>(</span><span class='id identifier rubyid_areas'>areas</span><span class='rparen'>)</span>
784
+ <span class='ivar'>@areas</span><span class='op'>=</span><span class='id identifier rubyid_areas'>areas</span>
785
+ <span class='kw'>end</span></pre>
786
+ </td>
787
+ </tr>
788
+ </table>
789
+ </div>
790
+
791
+ </div>
792
+
793
+ </div>
794
+
795
+ <div id="footer">
796
+ Generated on Thu Nov 10 15:59:20 2016 by
797
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
798
+ 0.8.7.6 (ruby-2.3.1).
799
+ </div>
800
+
801
+ </body>
802
+ </html>