image_voodoo 0.8.9 → 0.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 525eaa36345ce66a917c101be73299b04e2800cb
4
- data.tar.gz: e851fe90c983c411388d7b1e37ef0c2e323f677b
2
+ SHA256:
3
+ metadata.gz: e110e54c634bb3970622f8b0e4fb180fa570e15c53b0ccf830d3ccaf1efed822
4
+ data.tar.gz: 34d6555550532df09c08f48d15c79d2b749573c85dc8e726bae1757b0249a189
5
5
  SHA512:
6
- metadata.gz: 02453c98b8e64606ecb01834cebd6d04ba96212377308ca3f4a36f2ab91ae79db59dee0ca1b8056d912b3e66eea71da20d120fb81935d98f6d3a1550e3e57b17
7
- data.tar.gz: 204639d91890c6525a6bae30fd1db9fd61f999187576e5213ac064bc1b8b29e57d3b7412b4ae691e6c1caa9922bdf0659f5535c49a0ebfed9344af5721bdb4db
6
+ metadata.gz: 5e4cf9fbf2a7d8045dd3a5be081ae2c1410cc71e327386f779b3f774d95fc4a1d174221e62cfc94c441e738e41e6e572e033f2c47da8e0c9759ca10cf4fcdd46
7
+ data.tar.gz: 50608dbcde4b2abc26877b0bafa91223e5a26f818dd398ad8b245dd630cc1ccd9fd8974cbaca0c0db63f493066fde7ba3d224464363fe4adbc9f44bb4b65ace7
data/.gitignore CHANGED
@@ -1,2 +1,5 @@
1
1
  /pkg
2
2
  *~
3
+ Gemfile.lock
4
+ lib/image_voodoo_jars.rb
5
+ lib/com
@@ -69,17 +69,17 @@ Style/SpecialGlobalVars:
69
69
  Enabled: false
70
70
 
71
71
  # I am grouping math and using lack of whitespace for separation.
72
- Style/SpaceAroundOperators:
72
+ Layout/SpaceAroundOperators:
73
73
  Enabled: false
74
74
 
75
75
  # I prefer tight assignment for opt args.
76
- Style/SpaceAroundEqualsInParameterDefault:
76
+ Layout/SpaceAroundEqualsInParameterDefault:
77
77
  Enabled: false
78
78
 
79
79
  # Java methods which override or implement Java method names cannot be switched
80
80
  # to snake case. Do we really need this as a rule anyways? I have never seen
81
81
  # a Rubyist do this as a preferred style?
82
- Style/MethodName:
82
+ Naming/MethodName:
83
83
  Enabled: false
84
84
 
85
85
  # bin/image_voodoo main options block.
@@ -113,3 +113,61 @@ Style/ParallelAssignment:
113
113
  Metrics/ParameterLists:
114
114
  Exclude:
115
115
  - 'lib/image_voodoo/awt/shapes.rb'
116
+
117
+ # This is complaining that 'x' and 'y' are bad names because they are less
118
+ # than 3 chars. Silly rule even if I appreciate what it is trying to
119
+ # accomplish. Interestingly, in image_voodoo I do use h for height and
120
+ # w for width. Those probably could be written out but they are so common
121
+ # I am basically opting for short-hand. This is something I rarely do except
122
+ # domain-driven code like this (x,y,h,w).
123
+ Naming/UncommunicativeMethodParamName:
124
+ Enabled: false
125
+
126
+ # This represents one of those frustrating dogmatic rules where if I followed
127
+ # this advice I would then violate the column length rule. I specifically
128
+ # use traditional if indented block in cases where if_mod doesn't fit.
129
+ # Gramatically, if_mod can be across two lines but I hate how that looks. The
130
+ # second solution of logical &&/|| change for a raise is alien to for all but
131
+ # assignment.
132
+ Style/IfUnlessModifier:
133
+ Enabled: false
134
+
135
+ # What the hell. Really telling people that encoding: utf-8 should not happen
136
+ # because there are no multi-byte utf-8 characters in it? Why add this noise?
137
+ Style/Encoding:
138
+ Enabled: false
139
+
140
+ # FIXME:
141
+ # This is an unknown error which I should figure out. It must be some
142
+ # StandardError (which is what nothing explicit means) but I should actually
143
+ # be more explicit here.
144
+ Style/RescueStandardError:
145
+ Exclude:
146
+ - 'lib/image_voodoo.rb'
147
+
148
+
149
+ # This was complaining metadata_impl should use @metadata_impl instead of
150
+ # @metadata. I disagree and am unsure why I need to follow this programs
151
+ # opinion on what a good name is? What is commentable is if I change the
152
+ # variable name to @gorgon it still tells me I need to use @metadata_impl.
153
+ # So if I conditionally add any state in any method it will tell me I am
154
+ # memoizing and have to use same ivar as the name of the method? Is it more
155
+ # sophisticated than that? Should I have spent 2-3 minutes trying to figure
156
+ # out how this rule was implemented? :)
157
+ Naming/MemoizedInstanceVariableName:
158
+ Enabled: false
159
+
160
+ # I have two modes of use for private. If it is a small number of individual
161
+ # methods I am explicit and inline the private. If it is a large number of
162
+ # methods especially when the name is fairly obvious that those will be private
163
+ # (like render_impl) then I use block private. Not sure telling me I can only
164
+ # use a single style is very useful.
165
+ Style/AccessModifierDeclarations:
166
+ Enabled: false
167
+
168
+ # I feel for the tiny amount of generation here a better name would not help
169
+ # me understand it better. This is one of those naming rules I feel is
170
+ # probably helpful a minority of the time. Also I have never been confused
171
+ # by what a heredoc text represents because of my heredoc terminator?
172
+ Naming/HeredocDelimiterNaming:
173
+ Enabled: false
@@ -3,7 +3,15 @@ language: ruby
3
3
  sudo: false
4
4
 
5
5
  rvm:
6
- - jruby-19mode
6
+ - jruby-head
7
+
8
+ before_install:
9
+ - mkdir rvm_tmp
10
+ - cd rvm_tmp
7
11
 
8
12
  before_script:
9
- - git clone https://github.com/drewnoakes/metadata-extractor-images.git ../metadata-extractor-images
13
+ - cd ..
14
+ - git clone --depth 1 https://github.com/drewnoakes/metadata-extractor-images.git ../metadata-extractor-images
15
+
16
+ install: JRUBY_OPTS=--dev jruby --dev -S bundle install --jobs=3 --retry=3
17
+
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,3 @@
1
+ org.yaml:snakeyaml:1.23:compile:
2
+ com.drewnoakes:metadata-extractor:2.11.0:compile:
3
+ com.adobe.xmp:xmpcore:5.1.3:compile:
data/Rakefile CHANGED
@@ -1,11 +1,19 @@
1
1
  require 'bundler'
2
2
  require 'rake/testtask'
3
+ require 'jars/installer'
3
4
  Bundler::GemHelper.install_tasks
5
+ Bundler.setup
4
6
 
5
- task :default => :test
7
+ task :default => [:vendor_jars, :test]
8
+
9
+ desc 'Vendor Jars'
10
+ task :vendor_jars do
11
+ test_file = File.expand_path File.join('lib', 'image_voodoo_jars.rb'), __dir__
12
+ Jars::Installer.vendor_jars! unless File.exist? test_file
13
+ end
6
14
 
7
15
  desc 'Run tests'
8
- task :test do
16
+ task :test => :vendor_jars do
9
17
  Rake::TestTask.new do |t|
10
18
  t.libs << 'lib:vendor'
11
19
  t.test_files = FileList['test/test*.rb']
@@ -106,7 +106,7 @@ opts = OptionParser.new do |o|
106
106
  end
107
107
 
108
108
  o.on('--pop', 'Revert back to the previous image') do
109
- actions << ->() { images.pop || original_image }
109
+ actions << -> { images.pop || original_image }
110
110
  end
111
111
 
112
112
  o.on('-f', '--format', 'Print the image format') do
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
4
  require 'image_voodoo/version'
5
5
 
6
6
  Gem::Specification.new do |s|
@@ -20,4 +20,11 @@ Gem::Specification.new do |s|
20
20
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
21
21
  s.require_paths = %w[lib vendor]
22
22
  s.has_rdoc = true
23
+
24
+ s.add_development_dependency 'jar-dependencies'
25
+ s.add_development_dependency 'rake'
26
+ s.add_development_dependency 'ruby-maven'
27
+ s.add_development_dependency 'test-unit'
28
+
29
+ s.requirements << 'jar com.drewnoakes, metadata-extractor, 2.11.0'
23
30
  end
@@ -31,7 +31,7 @@ end
31
31
  # img = ImageVoodoo.with_image(ARGV[0])
32
32
  # negative_img = img.negative
33
33
  class ImageVoodoo
34
- attr_accessor :quality
34
+ attr_writer :quality # used by quality(value)
35
35
 
36
36
  include Java
37
37
 
@@ -95,12 +95,12 @@ class ImageVoodoo
95
95
  # Creates a square thumbnail of the image cropping the longest edge to
96
96
  # match the shortest edge, resizes to size, and yields/returns the new image.
97
97
  def cropped_thumbnail(size)
98
- l, t, r, b = calculate_thumbnail_dimentions
98
+ l, t, r, b = calculate_thumbnail_dimensions
99
99
  target = with_crop(l, t, r, b).thumbnail(size)
100
100
  block_given? ? yield(target) : target
101
101
  end
102
102
 
103
- def calculate_thumbnail_dimensions
103
+ private def calculate_thumbnail_dimensions
104
104
  half = (width - height).abs / 2
105
105
  if width > height
106
106
  [half, 0, half + height, height]
@@ -108,7 +108,6 @@ class ImageVoodoo
108
108
  [0, half, width, half + width]
109
109
  end
110
110
  end
111
- private :calculate_thumbnail_dimensions
112
111
 
113
112
  # Flips the image horizontally and yields/returns the new image.
114
113
  def flip_horizontally
@@ -157,7 +156,7 @@ class ImageVoodoo
157
156
  def resize(width, height)
158
157
  target = guard { resize_impl(width, height) }
159
158
  block_given? ? yield(target) : target
160
- rescue NativeException => ne
159
+ rescue java.lang.Exception => ne # figure out why this is here at all?
161
160
  raise ArgumentError, ne.message
162
161
  end
163
162
 
@@ -227,7 +226,7 @@ class ImageVoodoo
227
226
  # support it. Otherwise, this method will detect that the method is
228
227
  # missing.
229
228
  def self.guard(&block)
230
- return block.call
229
+ block.call
231
230
  rescue NoMethodError => e
232
231
  "Unimplemented Feature: #{e}"
233
232
  end
@@ -180,8 +180,8 @@ class ImageVoodoo
180
180
 
181
181
  # Converts a RGB hex value into a java.awt.Color object or dies trying
182
182
  # with an ArgumentError.
183
- def hex_to_color(rgb='00000')
184
- rgb = '000000' unless rgb
183
+ def hex_to_color(rgb='000000')
184
+ rgb ||= '000000'
185
185
  raise ArgumentError, 'hex rrggbb needed' if rgb !~ /[[:xdigit:]]{6,6}/
186
186
  Color.new(rgb[0, 2].to_i(16), rgb[2, 2].to_i(16), rgb[4, 2].to_i(16))
187
187
  end
@@ -248,9 +248,10 @@ class ImageVoodoo
248
248
  when 2 then flip_horizontally
249
249
  when 3 then rotate(180)
250
250
  when 4 then flip_vertically
251
- when 5 then flip_horizontally && rotate(270)
251
+ when 5 then flip_horizontally && rotate(90)
252
252
  when 6 then rotate(90)
253
253
  when 7 then flip_horizontally && rotate(270)
254
+ when 8 then rotate(270)
254
255
  else self
255
256
  end
256
257
  end
@@ -290,7 +291,7 @@ class ImageVoodoo
290
291
  def rotate_impl(radians)
291
292
  new_width, new_height = rotate_new_dimensions(radians)
292
293
  paint_new_buffered_image(new_width, new_height) do |g|
293
- g.jtranslate (new_width - width) / 2, (new_height - height) / 2
294
+ g.translate (new_width - width) / 2, (new_height - height) / 2
294
295
  g.rotate radians, width / 2, height / 2
295
296
  g.draw_this_image @src
296
297
  end
@@ -6,10 +6,6 @@ class ImageVoodoo
6
6
 
7
7
  # Re-open to add convenience methods.
8
8
  class Graphics2D
9
- def jtranslate(x, y)
10
- java_send :translate, [::Java.int, ::Java.int], x, y
11
- end
12
-
13
9
  def draw_this_image(image)
14
10
  draw_image image, 0, 0, nil
15
11
  end
@@ -1,5 +1,5 @@
1
- require_relative '../../vendor/xmpcore-5.1.2.jar'
2
- require_relative '../../vendor/metadata-extractor-2.7.0.jar'
1
+ require 'image_voodoo_jars'
2
+ require 'stringio'
3
3
 
4
4
  class ImageVoodoo
5
5
  # Metadata contained within the image.
@@ -46,6 +46,18 @@ class ImageVoodoo
46
46
  def width
47
47
  self['Exif Sub IFD']['Exif Image Width']
48
48
  end
49
+
50
+ def to_s
51
+ out = StringIO.new
52
+ out.puts "[{dir name}] - {tag name} = {tag descr}"
53
+ out.puts "---------------------------------------"
54
+ @metadata.directories.each do |directory|
55
+ directory.tags.each do |tag|
56
+ out.puts "[#{directory.name}] - #{tag.tag_name} = #{tag.description}"
57
+ end
58
+ end
59
+ out.string
60
+ end
49
61
  end
50
62
 
51
63
  # All metadata are contained within Directories. An image may have n
@@ -54,7 +66,8 @@ class ImageVoodoo
54
66
  # directory.
55
67
  class Directory
56
68
  def initialize(metadata)
57
- @directory = metadata.get_directory self.class.directory_class.java_class
69
+ jclass = self.class.directory_class.java_class
70
+ @directory = metadata.get_first_directory_of_type jclass
58
71
  end
59
72
 
60
73
  ##
@@ -1,3 +1,3 @@
1
1
  class ImageVoodoo
2
- VERSION = '0.8.9'.freeze
2
+ VERSION = '0.9.0'.freeze
3
3
  end
File without changes
@@ -24,7 +24,7 @@ class TestImageVoodoo < Test::Unit::TestCase
24
24
  def lower_right
25
25
  [10, 10]
26
26
  end
27
-
27
+
28
28
  def upper_left
29
29
  [0, 0]
30
30
  end
@@ -13,8 +13,8 @@ if !File.exist? IMAGE_DIR
13
13
  else
14
14
  class TestImageVoodooMetadata < Test::Unit::TestCase
15
15
  def setup
16
- @path = File.join IMAGE_DIR, 'Apple iPhone 4S.jpg'
17
- @path_gps = File.join IMAGE_DIR, 'Apple iPhone 4.jpg'
16
+ @path = File.join IMAGE_DIR, 'jpg', 'Apple iPhone 4S.jpg'
17
+ @path_gps = File.join IMAGE_DIR, 'jpg', 'Apple iPhone 4.jpg'
18
18
  @path_no_exif = File.join File.dirname(__FILE__), 'pix.png'
19
19
  end
20
20
 
@@ -53,5 +53,11 @@ else
53
53
  assert_equal('N', img.metadata[:Gps]['Latitude Ref'])
54
54
  end
55
55
  end
56
+
57
+ def test_metadata_to_s
58
+ ImageVoodoo.with_image @path do |img|
59
+ assert img.metadata.to_s =~ /Make = Apple/
60
+ end
61
+ end
56
62
  end
57
63
  end
metadata CHANGED
@@ -1,15 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: image_voodoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.9
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas E. Enebo, Charles Nutter, Nick Sieger
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-06 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2019-02-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ name: jar-dependencies
20
+ prerelease: false
21
+ type: :development
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ name: rake
34
+ prerelease: false
35
+ type: :development
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ name: ruby-maven
48
+ prerelease: false
49
+ type: :development
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ name: test-unit
62
+ prerelease: false
63
+ type: :development
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
13
69
  description: Image manipulation in JRuby with ImageScience compatible API
14
70
  email: tom.enebo@gmail.com
15
71
  executables:
@@ -22,7 +78,9 @@ files:
22
78
  - ".hgtags"
23
79
  - ".rubocop.yml"
24
80
  - ".travis.yml"
81
+ - Gemfile
25
82
  - History.txt
83
+ - Jars.lock
26
84
  - LICENSE-2.0.txt
27
85
  - LICENSE.txt
28
86
  - Manifest.txt
@@ -56,12 +114,10 @@ files:
56
114
  - test/test_shapes.rb
57
115
  - tools/gen.rb
58
116
  - vendor/CMYKDemo.jar
59
- - vendor/metadata-extractor-2.7.0.jar
60
- - vendor/xmpcore-5.1.2.jar
61
117
  homepage: http://github.com/jruby/image_voodoo
62
118
  licenses: []
63
119
  metadata: {}
64
- post_install_message:
120
+ post_install_message:
65
121
  rdoc_options: []
66
122
  require_paths:
67
123
  - lib
@@ -76,10 +132,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
132
  - - ">="
77
133
  - !ruby/object:Gem::Version
78
134
  version: '0'
79
- requirements: []
135
+ requirements:
136
+ - jar com.drewnoakes, metadata-extractor, 2.11.0
80
137
  rubyforge_project: image_voodoo
81
- rubygems_version: 2.5.2
82
- signing_key:
138
+ rubygems_version: 2.7.6
139
+ signing_key:
83
140
  specification_version: 4
84
141
  summary: Image manipulation in JRuby with ImageScience compatible API
85
142
  test_files:
Binary file