dynamic_image 2.0.25 → 2.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20b1cfa9c326762d6b3d1bca63b4d8d65516cc266abd03f55328b4cca8086dc3
4
- data.tar.gz: 4a0496d6507534664dc8e39bc59358a2607df6aaaa966ee0eda3990f72cae8bf
3
+ metadata.gz: eca1d50c2a8a433acc951254bd40d1717de820d564656584611dbc28fc7b5c01
4
+ data.tar.gz: c76ed29bd97f9c4cfc0a7e393b8ac675fd938129dea98cf5307885d7dbca18d5
5
5
  SHA512:
6
- metadata.gz: c04933c776c41870142473869f983fd0d8d1a0b98602abf41b3fb5392f6d6ef8c4cb2f77c875044f32cbc7903d1dd9de06c644fcfc73c913bd414583ee27dfae
7
- data.tar.gz: 79ad9d9b59398d56765878253170eae968d2d8320c31b992fd9758ff2dd00b8131db1fae2746f6af359eeb8b9934dfe4020b30cd91602f1b6872302c95b2d1d6
6
+ metadata.gz: 060a0bae2ea57be5954f290b1a5503299aa59b4a54db20f727ef9286afa704cbcaefe11a7e700dda58f9e829313a547af53cfa31a3d46b4a3cbb45e18cfb316c
7
+ data.tar.gz: 11f78861bfd9c41c3fe49bb2f6d50c94f464eadaeeb225191d4512070b6cdbd9cdcaebe1e714c9f7903512287ae3e68e743fa9dd4be42c9f4af6600865c31b6f
data/README.md CHANGED
@@ -31,6 +31,7 @@ and enumeration attacks.
31
31
  * Rails 5
32
32
  * Ruby 2.4+
33
33
  * ImageMagick command line tools
34
+ * ExifTool
34
35
 
35
36
  ## Documentation
36
37
 
data/lib/dynamic_image.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "mini_exiftool"
3
4
  require "mini_magick"
4
5
  require "dis"
5
6
  require "vector2d"
@@ -44,13 +44,28 @@ module DynamicImage
44
44
  private
45
45
 
46
46
  def cache_expiration_header
47
- expires_in 30.days, public: true if response.status == 200
47
+ expires_in 1.year, public: true if response.status == 200
48
48
  end
49
49
 
50
50
  def find_record
51
51
  @record = model.find(params[:id])
52
52
  end
53
53
 
54
+ def process_and_send(image, options)
55
+ processed_image = DynamicImage::ProcessedImage.new(image, options)
56
+ if process_later?(processed_image, requested_size)
57
+ process_later(image, options, requested_size)
58
+ head 503, retry_after: 10
59
+ else
60
+ send_image(processed_image, requested_size)
61
+ end
62
+ end
63
+
64
+ def process_later(image, options, requested_size)
65
+ DynamicImage::Jobs::CreateVariant
66
+ .perform_later(image, options, requested_size.to_s)
67
+ end
68
+
54
69
  def process_later?(processed_image, size)
55
70
  return false unless DynamicImage.process_later_limit
56
71
 
@@ -64,11 +79,11 @@ module DynamicImage
64
79
 
65
80
  respond_to do |format|
66
81
  format.html do
67
- render(file: File.join(File.dirname(__FILE__), "templates/show"),
82
+ render(template: "dynamic_image/images/show",
68
83
  layout: false, locals: { options: options })
69
84
  end
70
85
  format.any(:gif, :jpeg, :jpg, :png, :tiff, :webp) do
71
- send_image(@record, options)
86
+ process_and_send(@record, options)
72
87
  end
73
88
  end
74
89
  end
@@ -90,17 +105,10 @@ module DynamicImage
90
105
  params[:format]
91
106
  end
92
107
 
93
- def send_image(image, options)
94
- processed_image = DynamicImage::ProcessedImage.new(image, options)
95
- if process_later?(processed_image, requested_size)
96
- DynamicImage::Jobs::CreateVariant
97
- .perform_later(image, options, requested_size.to_s)
98
- head 503, retry_after: 10
99
- else
100
- send_data(processed_image.cropped_and_resized(requested_size),
101
- content_type: processed_image.content_type,
102
- disposition: "inline")
103
- end
108
+ def send_image(processed_image, requested_size)
109
+ send_data(processed_image.cropped_and_resized(requested_size),
110
+ content_type: processed_image.content_type,
111
+ disposition: "inline")
104
112
  end
105
113
 
106
114
  def verify_signed_params
@@ -3,11 +3,17 @@
3
3
  module DynamicImage
4
4
  module Errors
5
5
  class Error < StandardError; end
6
+
6
7
  class InvalidImage < DynamicImage::Errors::Error; end
8
+
7
9
  class InvalidHeader < DynamicImage::Errors::Error; end
10
+
8
11
  class InvalidSignature < DynamicImage::Errors::Error; end
12
+
9
13
  class InvalidSizeOptions < DynamicImage::Errors::Error; end
14
+
10
15
  class InvalidTransformation < DynamicImage::Errors::Error; end
16
+
11
17
  class ParameterMissing < DynamicImage::Errors::Error; end
12
18
  end
13
19
  end
@@ -21,6 +21,12 @@ module DynamicImage
21
21
  @data = data
22
22
  end
23
23
 
24
+ def exif
25
+ raise DynamicImage::Errors::InvalidHeader unless valid_header?
26
+
27
+ MiniExiftool.new(string_io)
28
+ end
29
+
24
30
  def read
25
31
  raise DynamicImage::Errors::InvalidHeader unless valid_header?
26
32
 
@@ -39,7 +45,11 @@ module DynamicImage
39
45
  private
40
46
 
41
47
  def file_header
42
- @file_header ||= StringIO.new(@data, "rb").read(8)
48
+ @file_header ||= string_io.read(8)
49
+ end
50
+
51
+ def string_io
52
+ StringIO.new(@data, "rb")
43
53
  end
44
54
  end
45
55
  end
@@ -90,7 +90,10 @@ module DynamicImage
90
90
  end
91
91
 
92
92
  def convert_to_srgb(image, combined)
93
- combined.profile(srgb_profile) if image.data["profiles"].present?
93
+ if image.data["profiles"].present? &&
94
+ exif.colorspacedata&.strip&.downcase == record.colorspace
95
+ combined.profile(srgb_profile)
96
+ end
94
97
  combined.colorspace("sRGB") if record.cmyk?
95
98
  end
96
99
 
@@ -111,6 +114,10 @@ module DynamicImage
111
114
  end
112
115
  end
113
116
 
117
+ def exif
118
+ @exif ||= DynamicImage::ImageReader.new(record.data).exif
119
+ end
120
+
114
121
  def format
115
122
  @format ||= record_format
116
123
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DynamicImage
4
- VERSION = "2.0.25"
4
+ VERSION = "2.1.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamic_image
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.25
4
+ version: 2.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Inge Jørgensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-11 00:00:00.000000000 Z
11
+ date: 2021-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dis
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.6
33
+ - !ruby/object:Gem::Dependency
34
+ name: mini_exiftool
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.10'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.10'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: mini_magick
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -96,16 +110,16 @@ dependencies:
96
110
  name: rspec-rails
97
111
  requirement: !ruby/object:Gem::Requirement
98
112
  requirements:
99
- - - "~>"
113
+ - - ">="
100
114
  - !ruby/object:Gem::Version
101
- version: 3.7.0
115
+ version: '0'
102
116
  type: :development
103
117
  prerelease: false
104
118
  version_requirements: !ruby/object:Gem::Requirement
105
119
  requirements:
106
- - - "~>"
120
+ - - ">="
107
121
  - !ruby/object:Gem::Version
108
- version: 3.7.0
122
+ version: '0'
109
123
  - !ruby/object:Gem::Dependency
110
124
  name: simplecov
111
125
  requirement: !ruby/object:Gem::Requirement
@@ -145,6 +159,7 @@ files:
145
159
  - README.md
146
160
  - Rakefile
147
161
  - app/models/dynamic_image/variant.rb
162
+ - app/views/dynamic_image/images/show.html.erb
148
163
  - db/migrate/20190620160500_create_dynamic_image_variants.rb
149
164
  - lib/dynamic_image.rb
150
165
  - lib/dynamic_image/belongs_to.rb
@@ -166,7 +181,6 @@ files:
166
181
  - lib/dynamic_image/processed_image.rb
167
182
  - lib/dynamic_image/profiles/sRGB_ICC_v4_Appearance.icc
168
183
  - lib/dynamic_image/routing.rb
169
- - lib/dynamic_image/templates/show.html.erb
170
184
  - lib/dynamic_image/version.rb
171
185
  - lib/rails/generators/dynamic_image/resource/resource_generator.rb
172
186
  homepage: https://github.com/elektronaut/dynamic_image
@@ -188,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
202
  - !ruby/object:Gem::Version
189
203
  version: '0'
190
204
  requirements: []
191
- rubygems_version: 3.1.2
205
+ rubygems_version: 3.1.4
192
206
  signing_key:
193
207
  specification_version: 4
194
208
  summary: Rails plugin that simplifies image uploading and processing