使用 Shrine 和 image_processing gem 模糊图像
Blur images with Shrine and image_processing gem
我正在尝试使用 Shrine gem 在 Rails 应用程序的 Ruby 中模糊图像。这是我的上传文件:
require "image_processing/mini_magick"
class ImageUploader < Shrine
Attacher.derivatives_processor do |original|
magick = ImageProcessing::MiniMagick.source(original)
{
blurred: magick.append('-blur 0x8').resize_to_limit!(1024, 1024)
}
end
end
我以最基本的方式设置我的模型、控制器和表单,与 Shrine 入门教程中的相同 - https://shrinerb.com/docs/getting-started。
当我尝试保存图像时出现以下错误:
*** MiniMagick::Error Exception: convert /tmp/shrine20191112-4479-1xo3vgk.jpg -auto-orient -blur 0x5 -resize 1024x1024> -sharpen 0x1 /tmp/image_processing20191112-4479-1w094sa.jpg
failed with error:
convert: unrecognized option `-blur 0x5' @ error/convert.c/ConvertImageCommand/893.
"
没有 append('-blur 0x8')
它工作得很好,我做错了什么?我的 ImageMagick 版本是 7.0.7-11.
顺便说一句,我不介意用 libvips 模糊图像,我只是对 ImageMagick 有更多的经验,所以我就这么做了。
您需要分别指定每个命令行参数,在本例中为 -blur
和 0x8
:
magick.append('-blur', '0x8').resize_to_limit!(1024, 1024)
您还可以调用 #blur
方法,通过 method_missing
:
的魔法将应用为 -blur
magick.blur('0x8').resize_to_limit!(1024, 1024)
我认为 libvips 等效项是:
require "image_processing/vips"
class ImageUploader < Shrine
Attacher.derivatives_processor do |original|
vips = ImageProcessing::Vips.source(original)
{
blurred: vips.resize_to_limit(1024, 1024).gaussblur(2).call
}
end
end
因为 unknown methods are simply delegated to ruby-vips.
如果可以的话,先调整大小,这样会快很多。您也会获得更一致的结果,因为模糊程度不取决于调整大小。
我正在尝试使用 Shrine gem 在 Rails 应用程序的 Ruby 中模糊图像。这是我的上传文件:
require "image_processing/mini_magick"
class ImageUploader < Shrine
Attacher.derivatives_processor do |original|
magick = ImageProcessing::MiniMagick.source(original)
{
blurred: magick.append('-blur 0x8').resize_to_limit!(1024, 1024)
}
end
end
我以最基本的方式设置我的模型、控制器和表单,与 Shrine 入门教程中的相同 - https://shrinerb.com/docs/getting-started。 当我尝试保存图像时出现以下错误:
*** MiniMagick::Error Exception:
convert /tmp/shrine20191112-4479-1xo3vgk.jpg -auto-orient -blur 0x5 -resize 1024x1024> -sharpen 0x1 /tmp/image_processing20191112-4479-1w094sa.jpg
failed with error: convert: unrecognized option `-blur 0x5' @ error/convert.c/ConvertImageCommand/893. "
没有 append('-blur 0x8')
它工作得很好,我做错了什么?我的 ImageMagick 版本是 7.0.7-11.
顺便说一句,我不介意用 libvips 模糊图像,我只是对 ImageMagick 有更多的经验,所以我就这么做了。
您需要分别指定每个命令行参数,在本例中为 -blur
和 0x8
:
magick.append('-blur', '0x8').resize_to_limit!(1024, 1024)
您还可以调用 #blur
方法,通过 method_missing
:
-blur
magick.blur('0x8').resize_to_limit!(1024, 1024)
我认为 libvips 等效项是:
require "image_processing/vips"
class ImageUploader < Shrine
Attacher.derivatives_processor do |original|
vips = ImageProcessing::Vips.source(original)
{
blurred: vips.resize_to_limit(1024, 1024).gaussblur(2).call
}
end
end
因为 unknown methods are simply delegated to ruby-vips.
如果可以的话,先调整大小,这样会快很多。您也会获得更一致的结果,因为模糊程度不取决于调整大小。