Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中使用mini-magick和carrierwave优化图像_Ruby On Rails_Ruby_Imagemagick_Carrierwave_Minimagick - Fatal编程技术网

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保存图像。您可以自由定义上传图像的任何版本。