image_processing 0.10.3 → 0.11.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8540c4984c3cc5810f84f5b12301a8226617b9e5
4
- data.tar.gz: 1e120d2f40f7b7add09ae8c4b78a6ba172785be9
3
+ metadata.gz: e049246f3103f7f178b7318bf8dcf13695e4176d
4
+ data.tar.gz: 62cfaf744d25bdee1db2c6a070ffabe52c3df89f
5
5
  SHA512:
6
- metadata.gz: 6b0cb8ee60ada09a9068ebf09828befa47fee2485bd02791e34428e37c137e6a77eda1e78b99198ffbaa5d2c9cae37d6e129144a90ea272ffb6a12ca4cae7e23
7
- data.tar.gz: 49c1c4e250d29aa7e104e6c8304a1c3c504ab69049fa59e173e9d0d86256a87272a3b81648b5218ad2763662ef0017918a46433f197fa6a70a6504d61db59543
6
+ metadata.gz: 15e19280b7889ac52b21c435be6d132a535cd94c31e38eb5a85fe47b9ad210963117fded9b53a444dc2c0cbc08962808cd38cb25f5c70902bc0509d5a70ad23f
7
+ data.tar.gz: 236da6230651462334d51dabaf975e59e070001ae8269dfb6ff206de88ce86496fafa65b1fa4f89ea3bed8d866e06276eb192f57fe4829d150e3a4cb35bbf0ea
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 0.11.0 (2018-03-27)
2
+
3
+ * [minimagick] Fix broken deprecated `#convert` (@janko-m)
4
+
5
+ * [minimagick] Add `#limit` for specifying resource limits using `-limit` (@janko-m)
6
+
7
+ * [minimagick] Use `-thumbnail` instead of `-resize` in `#resize_*` methods (@janko-m)
8
+
9
+ * [minimagick] Add loader and saver options (@janko-m)
10
+
1
11
  ## 0.10.3 (2018-03-24)
2
12
 
3
13
  * [minimagick] Fix bang methods in deprecated API calling nondestructive versions (@janko-m)
data/README.md CHANGED
@@ -99,25 +99,7 @@ You can continue reading the API documentation for specific modules:
99
99
  * **[`ImageProcessing::Vips`]**
100
100
  * **[`ImageProcessing::MiniMagick`]**
101
101
 
102
- ## Optimization
103
-
104
- After images have been processed, you might want to additionally optimize them
105
- to reduce their filesize. You can do that with the [image_optim] gem:
106
-
107
- ```rb
108
- require "image_optim"
109
-
110
- result = ImageProcessing::Vips
111
- .resize_to_limit(400, 400)
112
- .saver(Q: 85)
113
- .call(image)
114
-
115
- image_optim = ImageOptim.new(...)
116
- image_optim.optimize_image!(result.path)
117
- result.open # refresh file descriptor
118
-
119
- result # optimized image
120
- ```
102
+ See the **[wiki]** for additional "How To" guides for common scenarios.
121
103
 
122
104
  ## Contributing
123
105
 
@@ -148,5 +130,5 @@ The `ImageProcessing::MiniMagick` functionality was extracted from
148
130
  [VIPS]: http://jcupitt.github.io/libvips/
149
131
  [`ImageProcessing::Vips`]: /doc/vips.md#imageprocessingvips
150
132
  [`ImageProcessing::MiniMagick`]: /doc/minimagick.md#imageprocessingminimagick
151
- [image_optim]: https://github.com/toy/image_optim
152
133
  [refile-mini_magick]: https://github.com/refile/refile-mini_magick
134
+ [wiki]: https://github.com/janko-m/image_processing/wiki
@@ -70,7 +70,8 @@ module ImageProcessing
70
70
  end
71
71
 
72
72
  deprecated_processing_method :convert do |file, format, page = nil, block|
73
- source(file, page: page)
73
+ source(file)
74
+ .loader(page: page)
74
75
  .custom(&block)
75
76
  .convert!(format)
76
77
  end
@@ -19,7 +19,6 @@ module ImageProcessing
19
19
 
20
20
  class Processor
21
21
  IMAGE_CLASS = ::MiniMagick::Tool
22
- TRANSPARENT = "rgba(255,255,255,0.0)"
23
22
 
24
23
  def apply_operation(name, magick, *args)
25
24
  if respond_to?(name)
@@ -30,40 +29,49 @@ module ImageProcessing
30
29
  end
31
30
 
32
31
  def resize_to_limit(magick, width, height)
33
- magick.resize "#{width}x#{height}>"
32
+ magick.thumbnail "#{width}x#{height}>"
34
33
  end
35
34
 
36
35
  def resize_to_fit(magick, width, height)
37
- magick.resize "#{width}x#{height}"
36
+ magick.thumbnail "#{width}x#{height}"
38
37
  end
39
38
 
40
39
  def resize_to_fill(magick, width, height, gravity: "Center")
41
- magick.resize "#{width}x#{height}^"
40
+ magick.thumbnail "#{width}x#{height}^"
42
41
  magick.gravity gravity
43
- magick.background TRANSPARENT
42
+ magick.background "rgba(255,255,255,0.0)" # transparent
44
43
  magick.extent "#{width}x#{height}"
45
44
  end
46
45
 
47
- def resize_and_pad(magick, width, height, background: TRANSPARENT, gravity: "Center")
48
- background = TRANSPARENT if background == "transparent"
46
+ def resize_and_pad(magick, width, height, background: :transparent, gravity: "Center")
47
+ background = "rgba(255,255,255,0.0)" if background.to_s == "transparent"
49
48
 
50
- magick.resize "#{width}x#{height}"
49
+ magick.thumbnail "#{width}x#{height}"
51
50
  magick.background background
52
51
  magick.gravity gravity
53
52
  magick.extent "#{width}x#{height}"
54
53
  end
55
54
 
55
+ def limit(magick, limits)
56
+ limit_args = limits.flat_map { |type, value| %W[-limit #{type} #{value}] }
57
+ magick.args.replace limit_args + magick.args
58
+ magick
59
+ end
60
+
56
61
  def append(magick, *args)
57
62
  magick.merge! args
58
63
  end
59
64
 
60
- def load_image(path_or_magick, page: nil, geometry: nil, fail: true, auto_orient: true)
65
+ def load_image(path_or_magick, page: nil, geometry: nil, fail: true, auto_orient: true, define: {}, **options)
61
66
  if path_or_magick.is_a?(::MiniMagick::Tool)
62
67
  magick = path_or_magick
63
68
  else
64
69
  source_path = path_or_magick
65
70
  magick = ::MiniMagick::Tool::Convert.new
66
71
 
72
+ apply_define(magick, define)
73
+ apply_options(magick, options)
74
+
67
75
  input_path = source_path
68
76
  input_path += "[#{page}]" if page
69
77
  input_path += "[#{geometry}]" if geometry
@@ -77,10 +85,38 @@ module ImageProcessing
77
85
  magick
78
86
  end
79
87
 
80
- def save_image(magick, destination_path, **options)
88
+ def save_image(magick, destination_path, define: {}, **options)
89
+ apply_define(magick, define)
90
+ apply_options(magick, options)
91
+
81
92
  magick << destination_path
93
+
82
94
  magick.call
83
95
  end
96
+
97
+ private
98
+
99
+ def apply_define(magick, define)
100
+ define.each do |namespace, options|
101
+ namespace = namespace.to_s.gsub("_", "-")
102
+
103
+ options.each do |key, value|
104
+ key = key.to_s.gsub("_", "-")
105
+
106
+ magick.define "#{namespace}:#{key}=#{value}"
107
+ end
108
+ end
109
+ end
110
+
111
+ def apply_options(magick, options)
112
+ options.each do |option, value|
113
+ case value
114
+ when true then magick.send(option)
115
+ when false then magick.send(option).+
116
+ else magick.send(option, *value)
117
+ end
118
+ end
119
+ end
84
120
  end
85
121
 
86
122
  extend Chainable
@@ -1,3 +1,3 @@
1
1
  module ImageProcessing
2
- VERSION = "0.10.3"
2
+ VERSION = "0.11.0"
3
3
  end
@@ -57,8 +57,7 @@ module ImageProcessing
57
57
  image = path_or_image
58
58
  else
59
59
  source_path = path_or_image
60
- loader = ::Vips.vips_foreign_find_load(source_path)
61
- options = select_valid_options(loader, options) if loader
60
+ options = select_valid_loader_options(source_path, options)
62
61
 
63
62
  image = ::Vips::Image.new_from_file(source_path, fail: true, **options)
64
63
  end
@@ -68,8 +67,7 @@ module ImageProcessing
68
67
  end
69
68
 
70
69
  def save_image(image, destination_path, **options)
71
- saver = ::Vips.vips_foreign_find_save(destination_path)
72
- options = select_valid_options(saver, options) if saver
70
+ options = select_valid_saver_options(destination_path, options)
73
71
 
74
72
  image.write_to_file(destination_path, **options)
75
73
  end
@@ -82,6 +80,16 @@ module ImageProcessing
82
80
  [width || MAX_COORD, height || MAX_COORD]
83
81
  end
84
82
 
83
+ def select_valid_loader_options(source_path, options)
84
+ loader = ::Vips.vips_foreign_find_load(source_path)
85
+ loader ? select_valid_options(loader, options) : options
86
+ end
87
+
88
+ def select_valid_saver_options(destination_path, options)
89
+ saver = ::Vips.vips_foreign_find_save(destination_path)
90
+ saver ? select_valid_options(saver, options) : options
91
+ end
92
+
85
93
  def select_valid_options(operation_name, options)
86
94
  operation = ::Vips::Operation.new(operation_name)
87
95
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: image_processing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.3
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janko Marohnić
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-24 00:00:00.000000000 Z
11
+ date: 2018-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest