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

4

我正在使用carrier-wave上传图片。上传时,我会利用Rmagick方法resize_to_fill为图片创建缩略图,就像下面这样。

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

这是所有RMagick方法的输出,carrierwave supports(我都不想要):

  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]

这个选项保持原图不裁剪,但是大图会被缩小以保持宽高比。

enter image description here

enter image description here

这是我想要的结果以及我的小图像和大图像应该如何显示。

enter image description here enter image description here

如何实现?我希望较小的图像保持原样,只将较大的图像裁剪为150 x 150。是否有其他方法或选项可传递给resize_to_fill?

1个回答

6

我通过修改carrierwave的:resize_to_fill方法来解决这个问题,具体实现方式请参考他们代码这里

我只是写了一个新的方法,用相同的代码检查上传的图像是否更小。以下是新方法的代码:

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

现在正好符合我的要求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接