如何制作Paperclip裁剪而不缩放附加图像?

时间:2013-03-15 01:43:59

标签: ruby-on-rails image-processing imagemagick paperclip

我希望Paperclip裁剪,而不是缩放(参见:摘录中的full1)

class Graphic < ActiveRecord::Base
  has_attached_file :image, :styles => { :full0 => "940x1000#" #want it to scale, and crop if neccessary
                                         :full1 => "940#", #want it to crop width, not scale
                                       }

我想:full1可以工作,但事实并非如此。通过“工作”我的意思是它应该裁剪图像的宽度,但不对它的高度做任何事情。原因是我正在上传网页截图,我希望它们被剪裁到940px宽(从中心),但它们的高度应该保持不变。就我在回形针上的研究而言,我没有找到如何做到这一点。

显然它得到了ImageMagick的支持:http://www.imagemagick.org/Usage/crop/#crop_strip但我不知道如何把它塞进铁轨上的回形针。

非常感谢!

2 个答案:

答案 0 :(得分:0)

您是否可以将高度设置为荒谬的大小,以便它不会出现问题?

class Graphic < ActiveRecord::Base
  has_attached_file :image, :styles => { :full0 => "940x1000#" #want it to scale, and crop if neccessary
                                         :full1 => "940x9999999#", #want it to crop width, not scale
                                       }

我认为会裁剪比940px更宽的东西。

答案 1 :(得分:0)

您可以转换图像处理选项,以下将集中裁剪图像。

has_attached_file :profile_picture, :storage => :s3,                             
                                     :styles => { :medium => "", :thumb => ""},
                                      :convert_options => {
                                          :thumb => Proc.new { |instance| instance.thumnail_dimension },
                                          :medium => Proc.new { |instance| instance.thumnail_dimension(300) }
                                          }

def thumnail_dimension(size=100)
    dimensions = Paperclip::Geometry.from_file(profile_picture.queued_for_write[:original].path)
    min = dimensions.width > dimensions.height ? dimensions.height : dimensions.width
    "-gravity Center -crop #{min}x#{min}+0+0 +repage -resize #{size}x#{size}^"
  end