rpdiff 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/README +5 -0
  3. data/bin/rpdiff +31 -0
  4. data/lib/rpdiff.rb +43 -0
  5. metadata +46 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: af35e2511342dba9d3c08c126b947a999e448d2e
4
+ data.tar.gz: 9077537a63e74d9f736a1586dcefbe21a1271c1c
5
+ SHA512:
6
+ metadata.gz: 6f810d02144f1063f6647b4fe2a229f53db5fab4e46605db3f1a2819c7c9b209f4b5ac9dc491588f19cc8513413231844c35f9ef34ed3f9771f4a4c15122364b
7
+ data.tar.gz: 72c4699264956ee3f1e3171b95d0b5a08d2d06e005ab57f1ce7378bcb0ca78d03d80e06f4506801ddeef8ccab22236c53b6a3839fc91143acbeac5f8153534f3
data/README ADDED
@@ -0,0 +1,5 @@
1
+ This is a wrapper on Perceptual diff (http://pdiff.sourceforge.net/).
2
+
3
+ The basic application is to compare images and see the differences or evaluate pixel by pixel how different they are. This is practical for a deployment/QA environment as well as other image processing applications, like finding similarities.
4
+
5
+ Based on https://github.com/aaronfeng/perceptual_diff/blob/master/perceptual_diff.rb
data/bin/rpdiff ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative "../lib/rpdiff.rb"
3
+
4
+ require 'optparse'
5
+ options = {}
6
+
7
+ OptionParser.new do |opts|
8
+ opts.banner = "Compares image1.tif and image2.tif using a perceptually based image metric. Options:"
9
+
10
+ opts.on("-verbose", "Turns on verbose mode") {|val| options[:verbose] = val}
11
+ opts.on("-debug", "Turns on perceptualdiff command line output") {|val| options[:debug] = val}
12
+ opts.on("-output out.ppm", String, "Write difference to the file o.ppm") {|val| options[:output] = val}
13
+ opts.on("-fov deg", String, "Field of view in degrees (0.1 to 89.9)") {|val| options[:fov] = val}
14
+ opts.on("-threshold p", Integer, "#pixels p below which differences are ignored") {|val| options[:threshold] = val}
15
+ opts.on("-gamma g", Float, "Value to convert rgb into linear space (default 2.2)") {|val| options[:gamma] = val}
16
+ opts.on("-luminance l", Float, "White luminance (default 100.0 cdm^-2)") {|val| options[:luminance] = val}
17
+ opts.on("-luminanceonly", "Only consider luminance; ignore chroma (color) in the comparison") {|val| options[:luminanceonly] = val}
18
+ opts.on("-match_percentage", "Process pixel match in %") {|val| options[:match_percentage] = val}
19
+
20
+ opts.parse!
21
+ if ARGV.count == 2
22
+ img1, img2 = ARGV
23
+
24
+ match_percentage = options.delete :match_percentage
25
+ rpdiff = RPDiff.new(img1, img2, options)
26
+ rpdiff.diff
27
+ else
28
+ puts opts
29
+ exit
30
+ end
31
+ end
data/lib/rpdiff.rb ADDED
@@ -0,0 +1,43 @@
1
+ class RPDiff
2
+
3
+ attr_reader :visibly_different, :identical, :indistinguishable, :pixel_difference,
4
+ :img1, :img2, :fov, :threshold, :gamma, :luminance
5
+
6
+ def initialize(img1, img2, options={})
7
+ @img1, @img2, @options = img1, img2, options
8
+ end
9
+
10
+ def diff
11
+ @indistinguishable = @visibly_different = @identical = false
12
+ @pixel_difference = 0
13
+
14
+ opts = "#{@img1} #{@img2} "
15
+ @options.each {|k, v| opts << "-#{k} #{v}" if v }
16
+ io = `perceptualdiff -verbose #{opts}`
17
+
18
+ io.split(/\n/).each do |line|
19
+ @fov = $1 if line =~ /Field of view is (\d+\.\d+) degrees/
20
+ @threshold = $1 if line =~ /Threshold pixels is (\d+) pixels/
21
+ @gamma = $1 if line =~ /The Gamma is (\d+\.\d+)/
22
+ @luminance = $1 if line =~ /The Display's luminance is (\d+\.\d+) candela per meter squared/
23
+ @pixel_difference = $1 if line =~ /(\d+) pixels are different/
24
+ @visibly_different = true if line =~ /FAIL: Images are visibly different/
25
+ @identical = true if line =~ /PASS: Images are binary identical/
26
+ @indistinguishable = true if line =~ /PASS: Images are perceptually indistinguishable/
27
+ end
28
+
29
+ if @options[:match_percentage]
30
+ calculate_match_percentage
31
+ end
32
+
33
+ puts io
34
+ end
35
+
36
+ #Optional gem requirement to get a % value out of image similarity.
37
+ def calculate_match_percentage
38
+ require 'fastimage'
39
+ @image_sizes = FastImage.size(@img1)
40
+ @match_percentage = 100 - (@pixel_difference.to_f * 100 / (@image_sizes.first * @image_sizes.last).to_f)
41
+ end
42
+
43
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rpdiff
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Gabriel Benmergui
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A thin wrapper on Perceptual Diff for ease of use.
14
+ email: gabriel.benmergui@gmail.com
15
+ executables:
16
+ - rpdiff
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - README
21
+ - bin/rpdiff
22
+ - lib/rpdiff.rb
23
+ homepage: http://github.com/conanbatt/rpdiff
24
+ licenses: []
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.2.2
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Rpdiff is a ruby wrapper on Perceptual diff
46
+ test_files: []