imgproxy 1.0.6 → 1.1.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.
- checksums.yaml +4 -4
- data/README.md +5 -0
- data/lib/imgproxy.rb +10 -0
- data/lib/imgproxy/builder.rb +7 -0
- data/lib/imgproxy/options.rb +54 -26
- data/lib/imgproxy/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 408a45b49e0ddd25815dd6a3f904a93a9df27e9d00e31dcfccab11a9cf841196
|
4
|
+
data.tar.gz: b43ff3e7f9c80922937729921ea1a2fc5187974298ff19f5190191ff2a2d4b95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d92e1e4782e614a0f445766e4f1d4b6b985564e4877b1a0230b2717b337acfea7d2ff09ff12cc9cbf1ea86312a5bc7c2c382102a9651f3e390ea4cdb7fadc68b
|
7
|
+
data.tar.gz: 6de6077c86b0d9a83dcb3673d35b9a28a0586ec9612211d233ed8fffc935de5ee8c587311fe695c7df882a3af42b558e221ac5f081a308274ace6c102a5ddf69
|
data/README.md
CHANGED
@@ -171,10 +171,15 @@ builder.url_for("http://images.example.com/images/image2.jpg")
|
|
171
171
|
* `gravity_x`, `gravity_y` — floating point numbers between 0 and 1 that define the coordinates of the center of the resulting image when `fp` gravity is used.
|
172
172
|
* `quality` — defines the quality of the resulting image, percentage.
|
173
173
|
* `background` — when set, imgproxy will fill the resulting image background with the specified color. Can be a hex-color string or an array of red, green and blue values (0-255).
|
174
|
+
* `brightness` — when set, imgproxy will adjust brightness of the resulting image. _Supported only by imgproxy pro._
|
175
|
+
* `contrast` — when set, imgproxy will adjust contrast of the resulting image. _Supported only by imgproxy pro._
|
176
|
+
* `saturation` — when set, imgproxy will adjust saturation of the resulting image. _Supported only by imgproxy pro._
|
174
177
|
* `blur` — when set, imgproxy will apply the gaussian blur filter to the resulting image. Value is the size of a mask imgproxy will use.
|
175
178
|
* `sharpen` — when set, imgproxy will apply the sharpen filter to the resulting image. Value is the size of a mask imgproxy will use.
|
179
|
+
* `pixelate` — when set, imgproxy will apply the pixelate filter to the resulting image. Value is the size of a pixel. _Supported only by imgproxy pro._
|
176
180
|
* `watermark_opacity` — when set, imgproxy will put a watermark on the resulting image. See [watermars guide](https://github.comimgproxym/imgproxy/blob/master/docs/watermark.md) for more info.
|
177
181
|
* `watermark_position`, `watermark_x_offset`, `watermark_y_offset`, `watermark_scale` — additional watermark options described in the [watermars guide](https://github.com/imgproxy/imgproxy/blob/master/docs/watermark.md).
|
182
|
+
* `style` - when set, imgproxy will prepend `<style>` node with provided content to the `<svg>` node of source SVG image. _Supported only by imgproxy pro._
|
178
183
|
* `preset` — array of names of presets that will be used by imgproxy. See [presets guide](https://github.com/imgproxy/imgproxy/blob/master/docs/presets.md) for more info.
|
179
184
|
* `cachebuster` — defines cache buster that doesn't affect image processing but it's changing allows to bypass CDN, proxy server and browser cache.
|
180
185
|
* `format` — specifies the resulting image format (`jpg`, `png`, `webp`).
|
data/lib/imgproxy.rb
CHANGED
@@ -45,6 +45,11 @@ module Imgproxy
|
|
45
45
|
# @param [String,URI, Object] image Source image URL or object applicable for
|
46
46
|
# the configured URL adapters
|
47
47
|
# @param [Hash] options Processing options
|
48
|
+
# @option options [Integer] :crop_width
|
49
|
+
# @option options [Integer] :crop_height
|
50
|
+
# @option options [String] :crop_gravity
|
51
|
+
# @option options [Float] :crop_gravity_x
|
52
|
+
# @option options [Float] :crop_gravity_y
|
48
53
|
# @option options [String] :resizing_type
|
49
54
|
# @option options [Integer] :width
|
50
55
|
# @option options [Integer] :height
|
@@ -56,13 +61,18 @@ module Imgproxy
|
|
56
61
|
# @option options [Float] :gravity_y
|
57
62
|
# @option options [Integer] :quality
|
58
63
|
# @option options [Array] :background
|
64
|
+
# @option options [Integer] :brightness supported only by imgproxy pro
|
65
|
+
# @option options [Float] :contrast supported only by imgproxy pro
|
66
|
+
# @option options [Float] :saturation supported only by imgproxy pro
|
59
67
|
# @option options [Float] :blur
|
60
68
|
# @option options [Float] :sharpen
|
69
|
+
# @option options [Integer] :pixelate supported only by imgproxy pro
|
61
70
|
# @option options [Float] :watermark_opacity
|
62
71
|
# @option options [String] :watermark_position
|
63
72
|
# @option options [Integer] :watermark_x_offset
|
64
73
|
# @option options [Integer] :watermark_y_offset
|
65
74
|
# @option options [Float] :watermark_scale
|
75
|
+
# @option options [String] :style supported only by imgproxy pro
|
66
76
|
# @option options [Array] :preset
|
67
77
|
# @option options [String] :cachebuster
|
68
78
|
# @option options [String] :format
|
data/lib/imgproxy/builder.rb
CHANGED
@@ -46,6 +46,7 @@ module Imgproxy
|
|
46
46
|
private
|
47
47
|
|
48
48
|
OPTIONS_ALIASES = {
|
49
|
+
crop: :c,
|
49
50
|
resize: :rs,
|
50
51
|
size: :s,
|
51
52
|
resizing_type: :rt,
|
@@ -56,9 +57,15 @@ module Imgproxy
|
|
56
57
|
gravity: :g,
|
57
58
|
quality: :q,
|
58
59
|
background: :bg,
|
60
|
+
adjust: :a,
|
61
|
+
brightness: :br,
|
62
|
+
contrast: :co,
|
63
|
+
saturation: :sa,
|
59
64
|
blur: :bl,
|
60
65
|
sharpen: :sh,
|
66
|
+
pixelate: :pix,
|
61
67
|
watermark: :wm,
|
68
|
+
watermark_url: :wmu,
|
62
69
|
preset: :pr,
|
63
70
|
cachebuster: :cb,
|
64
71
|
}.freeze
|
data/lib/imgproxy/options.rb
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
module Imgproxy
|
2
2
|
# Formats and regroups processing options
|
3
3
|
class Options < Hash
|
4
|
-
STRING_OPTS = %i[resizing_type gravity watermark_position style
|
5
|
-
|
6
|
-
|
4
|
+
STRING_OPTS = %i[resizing_type gravity crop_gravity watermark_position watermark_url style
|
5
|
+
cachebuster format].freeze
|
6
|
+
INT_OPTS = %i[width height crop_width crop_height
|
7
|
+
quality brightness pixelate watermark_x_offset watermark_y_offset].freeze
|
8
|
+
FLOAT_OPTS = %i[dpr gravity_x gravity_y crop_gravity_x crop_gravity_y contrast saturation
|
9
|
+
blur sharpen watermark_opacity watermark_scale].freeze
|
7
10
|
BOOL_OPTS = %i[enlarge extend].freeze
|
8
11
|
ARRAY_OPTS = %i[background preset].freeze
|
9
12
|
ALL_OPTS = (STRING_OPTS + INT_OPTS + FLOAT_OPTS + BOOL_OPTS + ARRAY_OPTS).freeze
|
10
13
|
|
11
|
-
OPTS_PRIORITY = %i[ resize size resizing_type width height dpr enlarge extend gravity
|
12
|
-
background blur sharpen watermark preset
|
14
|
+
OPTS_PRIORITY = %i[ crop resize size resizing_type width height dpr enlarge extend gravity
|
15
|
+
quality background blur sharpen pixelate watermark watermark_url preset
|
16
|
+
cachebuster ].freeze
|
13
17
|
|
14
18
|
# @param options [Hash] raw processing options
|
15
19
|
def initialize(options)
|
@@ -17,11 +21,10 @@ module Imgproxy
|
|
17
21
|
|
18
22
|
typecast
|
19
23
|
|
20
|
-
|
21
|
-
group_gravity_opts
|
22
|
-
group_watermark_opts
|
24
|
+
group_options
|
23
25
|
|
24
26
|
encode_style
|
27
|
+
encode_watermark_url
|
25
28
|
|
26
29
|
replace(Hash[sort_by { |k, _| OPTS_PRIORITY.index(k) || 99 }])
|
27
30
|
|
@@ -51,37 +54,53 @@ module Imgproxy
|
|
51
54
|
value.is_a?(Array) ? value : [value]
|
52
55
|
end
|
53
56
|
|
57
|
+
def group_options
|
58
|
+
group_crop_opts
|
59
|
+
group_resizing_opts
|
60
|
+
group_gravity_opts
|
61
|
+
group_adjust_opts
|
62
|
+
group_watermark_opts
|
63
|
+
end
|
64
|
+
|
65
|
+
def group_crop_opts
|
66
|
+
crop_width = delete(:crop_width)
|
67
|
+
crop_height = delete(:crop_height)
|
68
|
+
crop_gravity = extract_and_trim_nils(:crop_gravity, :crop_gravity_x, :crop_gravity_y)
|
69
|
+
|
70
|
+
return unless crop_width || crop_height
|
71
|
+
|
72
|
+
crop_gravity = nil if crop_gravity[0].nil?
|
73
|
+
|
74
|
+
self[:crop] = [crop_width || 0, crop_height || 0, *crop_gravity]
|
75
|
+
end
|
76
|
+
|
54
77
|
def group_resizing_opts
|
55
78
|
return unless self[:width] && self[:height]
|
56
79
|
|
57
|
-
self[:size] =
|
58
|
-
[delete(:width), delete(:height), delete(:enlarge), delete(:extend)],
|
59
|
-
)
|
80
|
+
self[:size] = extract_and_trim_nils(:width, :height, :enlarge, :extend)
|
60
81
|
|
61
82
|
self[:resize] = [delete(:resizing_type), *delete(:size)] if self[:resizing_type]
|
62
83
|
end
|
63
84
|
|
64
85
|
def group_gravity_opts
|
65
|
-
gravity =
|
66
|
-
[
|
67
|
-
delete(:gravity),
|
68
|
-
delete(:gravity_x),
|
69
|
-
delete(:gravity_y),
|
70
|
-
],
|
71
|
-
)
|
86
|
+
gravity = extract_and_trim_nils(:gravity, :gravity_x, :gravity_y)
|
72
87
|
|
73
88
|
self[:gravity] = gravity unless gravity[0].nil?
|
74
89
|
end
|
75
90
|
|
91
|
+
def group_adjust_opts
|
92
|
+
return unless values_at(:brightness, :contrast, :saturation).count { |o| !o.nil? } > 1
|
93
|
+
|
94
|
+
self[:adjust] = extract_and_trim_nils(:brightness, :contrast, :saturation)
|
95
|
+
end
|
96
|
+
|
76
97
|
def group_watermark_opts
|
77
|
-
watermark =
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
delete(:watermark_scale),
|
84
|
-
],
|
98
|
+
watermark = extract_and_trim_nils(
|
99
|
+
:watermark_opacity,
|
100
|
+
:watermark_position,
|
101
|
+
:watermark_x_offset,
|
102
|
+
:watermark_y_offset,
|
103
|
+
:watermark_scale,
|
85
104
|
)
|
86
105
|
|
87
106
|
self[:watermark] = watermark unless watermark[0].nil?
|
@@ -92,6 +111,15 @@ module Imgproxy
|
|
92
111
|
self[:style] = Base64.urlsafe_encode64(self[:style]).tr("=", "")
|
93
112
|
end
|
94
113
|
|
114
|
+
def encode_watermark_url
|
115
|
+
return if self[:watermark_url].nil?
|
116
|
+
self[:watermark_url] = Base64.urlsafe_encode64(self[:watermark_url]).tr("=", "")
|
117
|
+
end
|
118
|
+
|
119
|
+
def extract_and_trim_nils(*keys)
|
120
|
+
trim_nils(keys.map { |k| delete(k) })
|
121
|
+
end
|
122
|
+
|
95
123
|
def trim_nils(value)
|
96
124
|
value.delete_at(-1) while !value.empty? && value[-1].nil?
|
97
125
|
value
|
data/lib/imgproxy/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imgproxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Alexandrovich
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry-byebug
|