image_comparator 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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>