Ruby on rails 在rails中使用mini-magick和carrierwave优化图像
我正在使用Ruby on rails 在rails中使用mini-magick和carrierwave优化图像,ruby-on-rails,ruby,imagemagick,carrierwave,minimagick,Ruby On Rails,Ruby,Imagemagick,Carrierwave,Minimagick,我正在使用carrierwave上传图像。现在我想优化图像也。就像如果用户上传任何大小的图像,我想优化在小于200kb大小的图像 为此,我添加了mini-magickgem。 这是我的密码 version :listing_main do image = ::MiniMagick::Image::read(File.binread(@file.file)) // Want to compress image here resize_to_fill 800,600 end
carrierwave
上传图像。现在我想优化图像也。就像如果用户上传任何大小的图像,我想优化在小于200kb大小的图像
为此,我添加了mini-magick
gem。
这是我的密码
version :listing_main do
image = ::MiniMagick::Image::read(File.binread(@file.file))
// Want to compress image here
resize_to_fill 800,600
end
问题是我如何压缩图像,而不是找到任何方法和教程,使用Mini-Magick和CarrierWave更改图像质量很简单 首先,转到文件:
config/initializers/carrierwave.rb
。如果不存在,请创建一个。请输入代码:
module CarrierWave
module MiniMagick
def quality(percentage)
manipulate! do |img|
img.quality(percentage.to_s)
img = yield(img) if block_given?
img
end
end
end
end
之后,转到图像上传程序文件。在我的例子中,它位于app/uploaders/image\u uploader.rb
version :listing_main do
process resize_to_fill: [800, 600]
process :quality => 70
end
我使用的正是这段代码,效果很好。请参考我使用的imagemagick图像。调整大小以适应(x,x)(保持纵横比),然后检查文件大小,如果大于200kb,请再次调整大小。我没有找到更好的办法。但是可能有。如果您从客户端进行优化,这样您就可以保持快速上传并使用更少的网络资源,这将是最好的。这可能有用,但我还没有测试过@CannonMoyer我已经这样做了,但是我还想在后端压缩图像,所以你要改变大小,然后使其达到原始质量的70%,但这并不是问题中提到的最大200kb。可能吗?或者使用resize_填充也没关系,因为
[800600]
始终会生成小于200ox的图像。我注意到我们可以得到图像的文件大小,minimagik::image.open(file.path).data[“filesize”]
,它会给出一个类似2.932MB
或23.6KB
的字符串,所以我需要首先将该字符串解释为KB的整数,检查“MB”或“KB”(或者“GB”)为了确定质量百分比?为了添加到最后一条评论中,我刚刚注意到processresize\u to\u limit:[700700]
将4MB图片的大小更改为140KB左右。。因此,也许一个最大大小毕竟是不必要的。这个解决方案适用于jpg/jpeg格式,但不适用于PNG,它是version:listing_main do
?“listing_main”在哪里定义?listing_main
是要保存的图像版本。您可以有一个上载图像的多个版本。在这种情况下,将使用前缀listing_main
和尺寸800x600以及质量70保存图像。您可以自由定义上传图像的任何版本。