我正在尝试使用Shrine gem在Ruby on Rails应用程序中模糊图像。这是我的上传文件:
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异常:
convert /tmp/shrine20191112-4479-1xo3vgk.jpg -auto-orient -blur 0x5 -resize 1024x1024> -sharpen 0x1 /tmp/image_processing20191112-4479-1w094sa.jpg
因错误而失败: 转换:无法识别的选项-blur 0x5 @ error / convert.c / ConvertImageCommand / 893。 “
如果没有append('-blur 0x8')
,它就可以正常工作,我在做什么错?我的ImageMagick版本是 7.0.7-11 。
顺便说一句,我不介意使用libvips来模糊图像,我只是对ImageMagick有更多的经验,所以这就是我所追求的。
答案 0 :(得分:2)
您需要分别指定每个命令行参数,在这种情况下为-blur
和0x8
:
magick.append('-blur', '0x8').resize_to_limit!(1024, 1024)
您还可以调用#blur
方法,该方法将通过-blur
的魔力作为method_missing
应用:
magick.blur('0x8').resize_to_limit!(1024, 1024)
答案 1 :(得分:2)
我认为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起。
如果可以的话,请先将调整大小放在首位,这样会更快。由于模糊程度不取决于调整大小,因此您还将获得更一致的结果。