Rails + Carrierwave + RMagick:仅在图像很大时裁剪

时间:2013-09-09 00:46:20

标签: ruby carrierwave rmagick

我正在使用载波来上传图片。在上传时,我正在为图像创建缩略图,这是使用Rmagick方法完成的,resize_to_fill如下所示。

version :thumb do
    process :resize_to_fill=> [150, 150]
end

以下是所有RMagick方法carrierwave supports的输出(我不想要):

  1. :resize_to_fill => [150,150]
  2. 这适用于较大的图像,但我的较小图像会放大到150 x 150。 :resize_to_fill => [150,150]

    1. :resize_to_fit => [150,150]
    2. 再次调整大小,我希望它一个人留下!

      :resize_to_fit => [150,150]

      1. :resize_to_limit => [150,150]
      2. 这个按原样保留,但不会裁剪较大的图像。它们的大小调整以保持纵横比。

        enter image description here

        enter image description here

        以下是我想要的结果以及我的小图像和大图像的外观。

        enter image description here enter image description here

        这是怎么回事?我希望将较小的图像单独保留并仅将较大的图像裁剪为150 x 150.是否有其他方法或选项可以传递给resize_to_fill?

1 个答案:

答案 0 :(得分:6)

我通过修改代码here中描述的:resize_to_fill carrierwave方法解决了这个问题。

我刚用相同的代码创建了一个新方法,并检查上传的图像是否更小。这是新方法:

def resize_to_fill_modfied(width, height, gravity=::Magick::CenterGravity)
      manipulate! do |img|
        img.crop_resized!(width, height, gravity) unless (img.columns <= width && img.rows <= height)
        img = yield(img) if block_given?
        img
      end
    end

正是我现在想要的。

相关问题