mini_magick 4.5.1 → 4.6.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of mini_magick might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b47a71b858d75780aca2cad04723b23ebbe03f43
4
- data.tar.gz: 0435a6885e082c68913235ddad9219590e6d3400
3
+ metadata.gz: 45a32b5c2e6bb0323abe49c1d5c3cb5bd7378f3e
4
+ data.tar.gz: 430c76ab6de8661491e42bcb21a9ba21d9239e97
5
5
  SHA512:
6
- metadata.gz: 41be6f64c5a0190da1b04e16c90bcd6c68133b165a8f8515d9231d17a8da3f6900965e7147643b8beae9515b2ab08cd23229f845e1b2dba69473374ceb7e68fc
7
- data.tar.gz: 6eb28519339d44d5f658d4492708ebd459124c32bc0606a9fc9a2308de8eb442d0b11374bf9f486b7111f15ba05384dca346151ef410fb2bb082860a00d9ab7a
6
+ metadata.gz: a989fdcfa50a2317ce292c04724be10928f01e834c17f6b529646c16ab855be3d2bbcc3d1a929662bf327c7e8e77387a994b42bfa6ad5e159e09237492e9495e
7
+ data.tar.gz: 4f42cff0e866f24e8bfbd36e2121487424ba7f96a433ddefe3c5edaab70976531bf8bb15ba267eb6ef8d4bf359e752351d74b0416b1a57a2f15e5a84ff3ec1cd
@@ -145,23 +145,22 @@ module MiniMagick
145
145
  # is, it gets *modified*. You can either copy it yourself or use {.open}
146
146
  # which creates a temporary file for you and protects your original.
147
147
  #
148
- # @param input_path [String] The location of an image file
148
+ # @param input_path [String, Pathname] The location of an image file
149
149
  # @yield [MiniMagick::Tool::Mogrify] If block is given, {#combine_options}
150
150
  # is called.
151
151
  #
152
152
  def initialize(input_path, tempfile = nil, &block)
153
- @path = input_path
153
+ @path = input_path.to_s
154
154
  @tempfile = tempfile
155
155
  @info = MiniMagick::Image::Info.new(@path)
156
156
 
157
157
  combine_options(&block) if block
158
158
  end
159
159
 
160
- def eql?(other)
161
- self.class.equal?(other.class) &&
162
- signature == other.signature
160
+ def ==(other)
161
+ self.class == other.class && signature == other.signature
163
162
  end
164
- alias == eql?
163
+ alias eql? ==
165
164
 
166
165
  def hash
167
166
  signature.hash
@@ -269,7 +268,14 @@ module MiniMagick
269
268
  #
270
269
  attribute :signature
271
270
  ##
272
- # Returns the information from `identify -verbose` in a Hash format.
271
+ # Returns the information from `identify -verbose` in a Hash format, for
272
+ # ImageMagick.
273
+ #
274
+ # @return [Hash]
275
+ attribute :data
276
+ ##
277
+ # Returns the information from `identify -verbose` in a Hash format, for
278
+ # GraphicsMagick.
273
279
  #
274
280
  # @return [Hash]
275
281
  attribute :details
@@ -331,11 +337,13 @@ module MiniMagick
331
337
  # @param page [Integer] If this is an animated gif, say which 'page' you
332
338
  # want with an integer. Default 0 will convert only the first page; 'nil'
333
339
  # will convert all pages.
340
+ # @param read_opts [Hash] Any read options to be passed to ImageMagick
341
+ # for example: image.format('jpg', page, {density: '300'})
334
342
  # @yield [MiniMagick::Tool::Convert] It optionally yields the command,
335
343
  # if you want to add something.
336
344
  # @return [self]
337
345
  #
338
- def format(format, page = 0)
346
+ def format(format, page = 0, read_opts={})
339
347
  if @tempfile
340
348
  new_tempfile = MiniMagick::Utilities.tempfile(".#{format}")
341
349
  new_path = new_tempfile.path
@@ -347,6 +355,9 @@ module MiniMagick
347
355
  input_path << "[#{page}]" if page && !layer?
348
356
 
349
357
  MiniMagick::Tool::Convert.new do |convert|
358
+ read_opts.each do |opt, val|
359
+ convert.send(opt.to_s, val)
360
+ end
350
361
  convert << input_path
351
362
  yield convert if block_given?
352
363
  convert << new_path
@@ -1,3 +1,5 @@
1
+ require "json"
2
+
1
3
  module MiniMagick
2
4
  class Image
3
5
  # @private
@@ -27,6 +29,8 @@ module MiniMagick
27
29
  exif
28
30
  when "details"
29
31
  details
32
+ when "data"
33
+ data
30
34
  else
31
35
  raw(value)
32
36
  end
@@ -80,16 +84,29 @@ module MiniMagick
80
84
 
81
85
  def exif
82
86
  @info["exif"] ||= (
87
+ hash = {}
83
88
  output = self["%[EXIF:*]"]
84
- pairs = output.gsub(/^exif:/, "").split("\n").map { |line| line.split("=") }
85
- Hash[pairs].tap do |hash|
86
- ASCII_ENCODED_EXIF_KEYS.each do |key|
87
- next unless hash.has_key?(key)
88
89
 
89
- value = hash[key]
90
- hash[key] = decode_comma_separated_ascii_characters(value)
90
+ output.each_line do |line|
91
+ line = line.chomp("\n")
92
+
93
+ case MiniMagick.cli
94
+ when :imagemagick
95
+ if match = line.match(/^exif:/)
96
+ key, value = match.post_match.split("=", 2)
97
+ value = decode_comma_separated_ascii_characters(value) if ASCII_ENCODED_EXIF_KEYS.include?(key)
98
+ hash[key] = value
99
+ else
100
+ hash[hash.keys.last] << "\n#{line}"
101
+ end
102
+ when :graphicsmagick
103
+ key, value = line.split("=", 2)
104
+ value.gsub!("\\012", "\n") # convert "\012" characters to newlines
105
+ hash[key] = value
91
106
  end
92
107
  end
108
+
109
+ hash
93
110
  )
94
111
  end
95
112
 
@@ -102,6 +119,8 @@ module MiniMagick
102
119
  end
103
120
 
104
121
  def details
122
+ warn "[MiniMagick] MiniMagick::Image#details has been deprecated, as it was causing too many parsing errors. You should use MiniMagick::Image#data instead, which differs in a way that the keys are in camelcase." if MiniMagick.imagemagick?
123
+
105
124
  @info["details"] ||= (
106
125
  details_string = identify(&:verbose)
107
126
  key_stack = []
@@ -132,21 +151,39 @@ module MiniMagick
132
151
  )
133
152
  end
134
153
 
135
- def identify
136
- path = @path
137
- path += "[0]" unless path =~ /\[\d+\]$/
154
+ def data
155
+ raise Error, "MiniMagick::Image#data isn't supported on GraphicsMagick. Use MiniMagick::Image#details instead." if MiniMagick.graphicsmagick?
156
+
157
+ @info["data"] ||= (
158
+ json = MiniMagick::Tool::Convert.new do |convert|
159
+ convert << path
160
+ convert << "json:"
161
+ end
138
162
 
163
+ JSON.parse(json).fetch("image")
164
+ )
165
+ end
166
+
167
+ def identify
139
168
  MiniMagick::Tool::Identify.new do |builder|
140
169
  yield builder if block_given?
141
170
  builder << path
142
171
  end
143
172
  end
144
173
 
174
+ private
175
+
145
176
  def decode_comma_separated_ascii_characters(encoded_value)
146
177
  return encoded_value unless encoded_value.include?(',')
147
178
  encoded_value.scan(/\d+/).map(&:to_i).map(&:chr).join
148
179
  end
149
180
 
181
+ def path
182
+ value = @path
183
+ value += "[0]" unless value =~ /\[\d+\]$/
184
+ value
185
+ end
186
+
150
187
  end
151
188
  end
152
189
  end
@@ -200,6 +200,21 @@ module MiniMagick
200
200
  self << "-"
201
201
  end
202
202
 
203
+ ##
204
+ # Adds ImageMagick's pseudo-filename `-` for standard output.
205
+ #
206
+ # @example
207
+ # content = MiniMagick::Tool::Convert.new do |convert|
208
+ # convert << "input.jpg"
209
+ # convert.auto_orient
210
+ # convert.stdout
211
+ # end
212
+ # # executes `convert input.jpg -auto-orient -` which returns file contents
213
+ #
214
+ def stdout
215
+ self << "-"
216
+ end
217
+
203
218
  ##
204
219
  # Define creator operator methods
205
220
  #
@@ -14,7 +14,7 @@ module MiniMagick
14
14
  #
15
15
  def which(cmd)
16
16
  exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
17
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
17
+ ENV.fetch('PATH').split(File::PATH_SEPARATOR).each do |path|
18
18
  exts.each do |ext|
19
19
  exe = File.join(path, "#{cmd}#{ext}")
20
20
  return exe if File.executable? exe
@@ -8,8 +8,8 @@ module MiniMagick
8
8
 
9
9
  module VERSION
10
10
  MAJOR = 4
11
- MINOR = 5
12
- TINY = 1
11
+ MINOR = 6
12
+ TINY = 0
13
13
  PRE = nil
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_magick
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.1
4
+ version: 4.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corey Johnson
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2016-03-25 00:00:00.000000000 Z
16
+ date: 2016-12-03 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: rake
@@ -117,4 +117,3 @@ signing_key:
117
117
  specification_version: 4
118
118
  summary: Manipulate images with minimal use of memory via ImageMagick / GraphicsMagick
119
119
  test_files: []
120
- has_rdoc: