[minimagick] Add #define as a wrapper around -define

There is no reason this method shouldn't be public, and it's nice in
cases where settings we're defining don't apply to neither saving nor
loading images.
This commit is contained in:
Janko Marohnić
2018-04-16 17:41:00 +02:00
parent 3e977c7a17
commit 9c6caeca87
4 changed files with 66 additions and 26 deletions
+4
View File
@@ -1,3 +1,7 @@
## HEAD
* [minimagick] Add `#define` as a wrapper around `-define` (@janko-m)
## 1.1.0 (2018-04-05)
* [minimagick] Disallow splitting multi-layer images into multiple single-layer
+10
View File
@@ -153,6 +153,16 @@ File.extname(result.path)
By default the original format is retained when writing the image to a file. If
the source file doesn't have a file extension, the format will default to JPEG.
#### `#define`
Adds coder/decoder options with [`-define`] from the specified Hash.
```rb
ImageProcessing::MiniMagick
.define(png: { compression_level: 8, format: "png8" }) # -define png:compression-level=8 -define png:format=png8
# ...
```
#### `#method_missing`
Any unknown methods will be delegated to [`MiniMagick::Tool::Convert`].
+17 -13
View File
@@ -43,6 +43,22 @@ module ImageProcessing
magick.extent "#{width}x#{height}"
end
def define(magick, options)
return magick.define(options) if options.is_a?(String)
options.each do |namespace, options|
namespace = namespace.to_s.gsub("_", "-")
options.each do |key, value|
key = key.to_s.gsub("_", "-")
magick.define "#{namespace}:#{key}=#{value}"
end
end
magick
end
def limits(magick, options)
limit_args = options.flat_map { |type, value| %W[-limit #{type} #{value}] }
prepend_args(magick, limit_args)
@@ -98,19 +114,7 @@ module ImageProcessing
def apply_options(magick, define: {}, **options)
apply(magick, options)
apply_define(magick, define)
end
def apply_define(magick, define)
define.each do |namespace, options|
namespace = namespace.to_s.gsub("_", "-")
options.each do |key, value|
key = key.to_s.gsub("_", "-")
magick.define "#{namespace}:#{key}=#{value}"
end
end
define(magick, define)
end
def prepend_args(magick, args)
+35 -13
View File
@@ -39,19 +39,6 @@ describe "ImageProcessing::MiniMagick" do
assert_similar expected, actual
end
it "applies appended options" do
actual = ImageProcessing::MiniMagick.append("-resize", "400x400").call(@portrait)
expected = Tempfile.new(["result", ".jpg"], binmode: true).tap do |tempfile|
MiniMagick::Tool::Convert.new do |cmd|
cmd << @portrait.path
cmd.resize("400x400")
cmd << tempfile.path
end
end
assert_similar expected, actual
end
it "applies format" do
result = ImageProcessing::MiniMagick.convert("png").call(@portrait)
assert_equal ".png", File.extname(result.path)
@@ -301,6 +288,26 @@ describe "ImageProcessing::MiniMagick" do
end
end
describe "#define" do
it "adds -define options from a Hash" do
magick = ImageProcessing::MiniMagick
.source(@portrait)
.define(png: { compression_level: 8, format: "png8" })
.call(save: false)
assert_equal %W[-define png:compression-level=8 -define png:format=png8], magick.args[2..-1]
end
it "adds -define options from a String" do
magick = ImageProcessing::MiniMagick
.source(@portrait)
.define("png:compression-level=8")
.call(save: false)
assert_equal %W[-define png:compression-level=8], magick.args[2..-1]
end
end
describe "#limits" do
it "adds resource limits" do
pipeline = ImageProcessing::MiniMagick.limits(time: 0.001).source(@portrait)
@@ -308,4 +315,19 @@ describe "ImageProcessing::MiniMagick" do
assert_includes exception.message, "time limit exceeded"
end
end
describe "#append" do
it "appends CLI arguments" do
actual = ImageProcessing::MiniMagick.append("-resize", "400x400").call(@portrait)
expected = Tempfile.new(["result", ".jpg"], binmode: true).tap do |tempfile|
MiniMagick::Tool::Convert.new do |cmd|
cmd << @portrait.path
cmd.resize("400x400")
cmd << tempfile.path
end
end
assert_similar expected, actual
end
end
end