You've already forked image_processing
mirror of
https://github.com/usetrmnl/image_processing.git
synced 2026-04-29 13:33:11 -07:00
[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:
@@ -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
|
||||
|
||||
@@ -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`].
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user