dynamic_image 2.0.18 → 2.0.23

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: 9620717b51e3fcc35f2f90957062663615f646a9a74af97dcb5c3608bc3b6dbf
4
- data.tar.gz: dfcff9e322e4e6cfabba94d37f7fac37020c12c6e5683d98b0fcbdd9a7108df9
3
+ metadata.gz: 2a9eeb1b5378e17d2dcf9d6c0245df5386a1253dfdbefd0fff61fd5faeb2a1ee
4
+ data.tar.gz: 3156acfe1931d9530dc5c23d51716904feb2f1f16f00657cd9aa52c61d97cf94
5
5
  SHA512:
6
- metadata.gz: 2acfe22422a4a319e43979a219027051df1d4680bd313d7ae3ff5739f436e71cb933913cb9e1108ba34bb33d2184ec5b4b423c1ca9867e455b037cd4dc2b1e98
7
- data.tar.gz: 792b3807154854335a0bea0bcd0ad619ddd6d8ff7be2ebc3ee06c446b6b36ace01848c87a20fb6e5d1f225f8072e76eeb0e39fa40cdfa6aec46de683023354e0
6
+ metadata.gz: d3c0d2fd1e238b181b8d7cd86ebb12c65ebbe37e606bf434c969584def13b968e0bbd66b845b553d65c7d8e9245f20a066b88ee66f523de87391adf285aa194a
7
+ data.tar.gz: 51eda1715d2eb18931256018f95dfe9f714817bda16601d5c1ded50778cc4a0a31d27ec00ffe3287a88205e1c49cea09c0d159594c8552a2a94084821ff403c1
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Version](https://img.shields.io/gem/v/dynamic_image.svg?style=flat)](https://rubygems.org/gems/dynamic_image)
2
- [![Build Status](https://travis-ci.org/elektronaut/dynamic_image.svg?branch=master)](https://travis-ci.org/elektronaut/dynamic_image)
2
+ ![Build](https://github.com/elektronaut/dynamic_image/workflows/Build/badge.svg)
3
3
  [![Code Climate](https://codeclimate.com/github/elektronaut/dynamic_image/badges/gpa.svg)](https://codeclimate.com/github/elektronaut/dynamic_image)
4
4
  [![Code Climate](https://codeclimate.com/github/elektronaut/dynamic_image/badges/coverage.svg)](https://codeclimate.com/github/elektronaut/dynamic_image)
5
5
  [![Inline docs](http://inch-ci.org/github/elektronaut/dynamic_image.svg)](http://inch-ci.org/github/elektronaut/dynamic_image)
@@ -15,9 +15,9 @@ uploaded, DynamicImage stores the original file and generates images
15
15
  on demand. It handles cropping, resizing, format and colorspace
16
16
  conversion.
17
17
 
18
- Supported formats at the moment are JPEG, PNG, GIF, BMP and TIFF. The
19
- latter will automatically be converted to JPG. CMYK images will be
20
- converted to RGB, and RGB images will be converted to the sRGB
18
+ Supported formats at the moment are JPEG, PNG, GIF, BMP, WebP and TIFF.
19
+ BMP, WebP and TIFF images will automatically be converted to JPG. CMYK
20
+ images will be converted to RGB, and RGB images will be converted to the sRGB
21
21
  colorspace for consistent appearance in all browsers.
22
22
 
23
23
  DynamicImage is built on [Dis](https://github.com/elektronaut/dis)
@@ -8,7 +8,7 @@ module DynamicImage
8
8
 
9
9
  module ClassMethods
10
10
  def belongs_to_image(name, scope = nil, **options)
11
- belongs_to(name, scope, options)
11
+ belongs_to(name, scope, **options)
12
12
 
13
13
  define_method "#{name}=" do |new_image|
14
14
  if new_image.present? && !new_image.is_a?(DynamicImage::Model)
@@ -59,7 +59,7 @@ module DynamicImage
59
59
  render(file: File.join(File.dirname(__FILE__), "templates/show"),
60
60
  layout: false, locals: { options: options })
61
61
  end
62
- format.any(:gif, :jpeg, :png, :tiff) do
62
+ format.any(:gif, :jpeg, :jpg, :png, :tiff, :webp) do
63
63
  send_image(DynamicImage::ProcessedImage.new(@record, options))
64
64
  end
65
65
  end
@@ -69,7 +69,7 @@ module DynamicImage
69
69
  return unless stale?(@record)
70
70
 
71
71
  respond_to do |format|
72
- format.any(:gif, :jpeg, :png, :tiff) do
72
+ format.any(:gif, :jpeg, :jpg, :png, :tiff, :webp) do
73
73
  send_data(@record.data,
74
74
  filename: filename,
75
75
  content_type: @record.content_type,
@@ -17,11 +17,21 @@ module DynamicImage
17
17
  end
18
18
  end
19
19
 
20
+ initializer "dynamic_image.mime_types" do
21
+ Mime::Type.register "image/bmp", :bmp
22
+ Mime::Type.register "image/gif", :gif
23
+ Mime::Type.register "image/jpeg", :jpg
24
+ Mime::Type.register "image/jpeg", :jpeg
25
+ Mime::Type.register "image/png", :png
26
+ Mime::Type.register "image/tiff", :tiff
27
+ Mime::Type.register "image/webp", :webp
28
+ end
29
+
20
30
  initializer "dynamic_image.extensions", before: :load_active_support do
21
31
  ActiveSupport.on_load(:active_record) do
22
32
  send :include, DynamicImage::BelongsTo
23
33
  end
24
- ActionDispatch::Routing::Mapper.send :include, DynamicImage::Routing
34
+ ActionDispatch::Routing::Mapper.include DynamicImage::Routing
25
35
 
26
36
  ActionDispatch::ExceptionWrapper.rescue_responses.merge!(
27
37
  "DynamicImage::Errors::InvalidSignature" => :unauthorized
@@ -11,7 +11,8 @@ module DynamicImage
11
11
  "\xff\xd8", # JPEG
12
12
  "\x49\x49\x2a\x00", # TIFF
13
13
  "\x4d\x4d\x00\x2a",
14
- "\x42\x4d" # BMP
14
+ "\x42\x4d", # BMP
15
+ "\x52\x49\x46\x46" # WEBP
15
16
  ].map { |s| s.dup.force_encoding("binary") }
16
17
  end
17
18
  end
@@ -149,8 +149,8 @@ module DynamicImage
149
149
  @uncropped
150
150
  end
151
151
 
152
- def vector(x, y)
153
- Vector2d.new(x, y)
152
+ def vector(width, height)
153
+ Vector2d.new(width, height)
154
154
  end
155
155
  end
156
156
  end
@@ -82,8 +82,8 @@ module DynamicImage
82
82
 
83
83
  private
84
84
 
85
- def vector(x, y)
86
- Vector2d.new(x, y)
85
+ def vector(width, height)
86
+ Vector2d.new(width, height)
87
87
  end
88
88
  end
89
89
  end
@@ -69,7 +69,8 @@ module DynamicImage
69
69
  image/jpeg
70
70
  image/pjpeg
71
71
  image/png
72
- image/tiff]
72
+ image/tiff
73
+ image/webp]
73
74
  end
74
75
  end
75
76
 
@@ -43,7 +43,7 @@ module DynamicImage
43
43
  # Normalizes the image.
44
44
  #
45
45
  # * Applies EXIF rotation
46
- # * CMYK images are converted to sRGB
46
+ # * Converts to sRGB
47
47
  # * Strips metadata
48
48
  # * Optimizes GIFs
49
49
  # * Performs format conversion if the requested format is different
@@ -59,7 +59,7 @@ module DynamicImage
59
59
  process_data do |image|
60
60
  image.combine_options do |combined|
61
61
  combined.auto_orient
62
- combined.colorspace("sRGB") if needs_colorspace_conversion?
62
+ convert_to_srgb(image, combined)
63
63
  yield(combined) if block_given?
64
64
  optimize(combined)
65
65
  end
@@ -70,27 +70,35 @@ module DynamicImage
70
70
  private
71
71
 
72
72
  def coalesced(image)
73
- return image unless gif?
73
+ gif? ? DynamicImage::ImageReader.new(image.coalesce.to_blob).read : image
74
+ end
75
+
76
+ def convert_to_srgb(image, combined)
77
+ combined.profile(srgb_profile) if image.data["profiles"].present?
78
+ combined.colorspace("sRGB") if record.cmyk?
79
+ end
74
80
 
75
- DynamicImage::ImageReader.new(image.coalesce.to_blob).read
81
+ def create_variant(size)
82
+ record.variants.create(
83
+ variant_params(size).merge(filename: record.filename,
84
+ content_type: content_type,
85
+ data: crop_and_resize(size))
86
+ )
76
87
  end
77
88
 
78
89
  def crop_and_resize(size)
79
90
  normalized do |image|
80
- if record.cropped? || size != record.size
81
- image.crop(image_sizing.crop_geometry_string(size))
82
- image.resize(size)
83
- end
91
+ next unless record.cropped? || size != record.size
92
+
93
+ image.crop(image_sizing.crop_geometry_string(size))
94
+ image.resize(size)
84
95
  end
85
96
  end
86
97
 
87
98
  def find_or_create_variant(size)
88
- record.variants.find_by(variant_params(size)) ||
89
- record.variants.create(
90
- variant_params(size).merge(filename: record.filename,
91
- content_type: content_type,
92
- data: crop_and_resize(size))
93
- )
99
+ record.variants.find_by(variant_params(size)) || create_variant(size)
100
+ rescue ActiveRecord::RecordNotUnique
101
+ record.variants.find_by(variant_params(size))
94
102
  end
95
103
 
96
104
  def format
@@ -110,10 +118,6 @@ module DynamicImage
110
118
  DynamicImage::ImageSizing.new(record, uncropped: @uncropped)
111
119
  end
112
120
 
113
- def needs_colorspace_conversion?
114
- record.cmyk?
115
- end
116
-
117
121
  def needs_format_conversion?
118
122
  format != record_format
119
123
  end
@@ -136,27 +140,25 @@ module DynamicImage
136
140
  attr_reader :record
137
141
 
138
142
  def record_format
139
- { "image/bmp" => "BMP",
140
- "image/png" => "PNG",
141
- "image/gif" => "GIF",
142
- "image/jpeg" => "JPEG",
143
- "image/pjpeg" => "JPEG",
144
- "image/tiff" => "TIFF" }[record.content_type]
143
+ { "image/bmp" => "BMP", "image/png" => "PNG", "image/gif" => "GIF",
144
+ "image/jpeg" => "JPEG", "image/pjpeg" => "JPEG", "image/tiff" => "TIFF",
145
+ "image/webp" => "WEBP" }[record.content_type]
145
146
  end
146
147
 
147
148
  def require_valid_image!
148
149
  raise DynamicImage::Errors::InvalidImage unless record.valid?
149
150
  end
150
151
 
152
+ def srgb_profile
153
+ File.join(File.dirname(__FILE__), "profiles/sRGB_ICC_v4_Appearance.icc")
154
+ end
155
+
151
156
  def variant_params(size)
152
157
  crop_size, crop_start = image_sizing.crop_geometry(size)
153
158
 
154
- { width: size.x,
155
- height: size.y,
156
- crop_width: crop_size.x,
157
- crop_height: crop_size.y,
158
- crop_start_x: crop_start.x,
159
- crop_start_y: crop_start.y,
159
+ { width: size.x.round, height: size.y.round,
160
+ crop_width: crop_size.x, crop_height: crop_size.y,
161
+ crop_start_x: crop_start.x, crop_start_y: crop_start.y,
160
162
  format: format }
161
163
  end
162
164
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DynamicImage
4
- VERSION = "2.0.18"
4
+ VERSION = "2.0.23"
5
5
  end
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamic_image
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.18
4
+ version: 2.0.23
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: 2019-08-17 00:00:00.000000000 Z
11
+ date: 2020-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dis
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 1.0.6
20
17
  - - "~>"
21
18
  - !ruby/object:Gem::Version
22
19
  version: '1.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.6
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 1.0.6
30
27
  - - "~>"
31
28
  - !ruby/object:Gem::Version
32
29
  version: '1.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.6
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: mini_magick
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -78,6 +78,20 @@ dependencies:
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
80
  version: 2.2.1
81
+ - !ruby/object:Gem::Dependency
82
+ name: rails-controller-testing
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
81
95
  - !ruby/object:Gem::Dependency
82
96
  name: rspec-rails
83
97
  requirement: !ruby/object:Gem::Requirement
@@ -92,6 +106,20 @@ dependencies:
92
106
  - - "~>"
93
107
  - !ruby/object:Gem::Version
94
108
  version: 3.7.0
109
+ - !ruby/object:Gem::Dependency
110
+ name: simplecov
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: 0.17.1
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: 0.17.1
95
123
  - !ruby/object:Gem::Dependency
96
124
  name: sqlite3
97
125
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +162,7 @@ files:
134
162
  - lib/dynamic_image/model/validations.rb
135
163
  - lib/dynamic_image/model/variants.rb
136
164
  - lib/dynamic_image/processed_image.rb
165
+ - lib/dynamic_image/profiles/sRGB_ICC_v4_Appearance.icc
137
166
  - lib/dynamic_image/routing.rb
138
167
  - lib/dynamic_image/templates/show.html.erb
139
168
  - lib/dynamic_image/version.rb
@@ -157,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
186
  - !ruby/object:Gem::Version
158
187
  version: '0'
159
188
  requirements: []
160
- rubygems_version: 3.0.1
189
+ rubygems_version: 3.1.2
161
190
  signing_key:
162
191
  specification_version: 4
163
192
  summary: Rails plugin that simplifies image uploading and processing