dynamic_image 2.0.25 → 2.1.4

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
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