mini_magick 4.5.1 → 4.6.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.

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: