How can I reduce the quality of an uploading image

2020-04-05 07:20发布

I am running Ruby on Rails 3 and I would like to reduce the quality of an uploading image using the Paperclip plugin/gem. How can I do that?


At this time in my model file I have:

  has_attached_file :avatar, 
    :styles      => {
      :thumb     => ["50x50#",   :jpg],
      :medium    => ["250x250#", :jpg],
      :original  => ["600x600#", :jpg] }

that will convert images in to the .jpg format and will set dimensions.

4条回答
我命由我不由天
2楼-- · 2020-04-05 07:29

As James says, once you figure out the correct arguments to pass to ImageMagick's convert by experimenting on the command line, you can pass these in to Paperclip through the convert_options option as in James' example.

If you have multiple arguments, pass them in as an array. Here's an example which I laboured over for a while:

:convert_options => {:medium => ["-shave", "2x2", "-background", "white", 
                                 "-gravity", "center", "-extent", 
                                 "530x322", "+repage"],
                     :small  => ["-shave", "1x1"] }
查看更多
家丑人穷心不美
3楼-- · 2020-04-05 07:40

Except -quality, the -strip option of ImageMagick can remove all profile and other fluff from the image which may reduce more size

has_attached_file :photo,
  :styles => {
  :thumb => "100x100#" },
  :convert_options => {
  :thumb => "-quality 75 -strip" }
查看更多
ゆ 、 Hurt°
4楼-- · 2020-04-05 07:43

Try using convert_options.

has_attached_file :avatar, 
                  :styles          => { :thumb => '50x50#' },
                  :convert_options => { :thumb => '-quality 80' }
查看更多
唯我独甜
5楼-- · 2020-04-05 07:44

From the paperclip wiki, there's an option for quality:

class User < ActiveRecord::Base
  has_attached_file :photo,
                    :styles => {
                      :small => {
                        :geometry => '38x38#',
                        :quality => 40,
                        :format => 'JPG'
                      },
                      :medium => {
                        :geometry => '92x92#',
                        :quality => 50
                      }
end
查看更多
登录 后发表回答