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

Sha*_*nak 4 ruby rmagick carrierwave

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

version :thumb do
    process :resize_to_fill=> [150, 150]
end
Run Code Online (Sandbox Code Playgroud)

这是所有RMagick方法的输出载波wavewave 支持(我不想要):

  1. :resize_to_fill => [150,150]

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

  1. :resize_to_fit => [150,150]

它再次调整大小,我希望它独自留下!

:resize_to_fit => [150,150]

  1. :resize_to_limit => [150,150]

这个按原样保留,但不会裁剪较大的图像.它们的大小调整以保持纵横比.

在此输入图像描述

在此输入图像描述

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

在此输入图像描述 在此输入图像描述

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

Sha*_*nak 6

我通过修改解决了它: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
Run Code Online (Sandbox Code Playgroud)

完全是我现在想要的.