Carrierwave - 调整图像大小为固定宽度

28

我正在使用RMagick并希望将我的图像调整为固定宽度100px,并按比例缩放高度。例如,如果用户上传了300x900px的图片,我希望它被缩放为100x300px。

3个回答

46

只需将此代码放入您的上传文件中:

class ImageUploader < CarrierWave::Uploader::Base

  version :resized do
    # returns an image with a maximum width of 100px 
    # while maintaining the aspect ratio
    # 10000 is used to tell CW that the height is free 
    # and so that it will hit the 100 px width first
    process :resize_to_fit => [100, 10000]
  end

end

文档和示例在这里:http://www.imagemagick.org/RMagick/doc/image3.html#resize_to_fit

请记住,resize_to_fit会放大图像,如果它们比100px小。 如果您不希望这样做,请使用resize_to_limit替换它。


正如Giang Nguyen指出的那样:关于carrierwave和图像处理,[100,nil]似乎等同于[100,100] - Christoph Schiessl

15

我使用

process :resize_to_fit => [100, 10000]

使用10000或任何一个非常大的数字告诉Carrierwave高度自由调整,只需调整宽度。

@iWasRobbed:我认为这不是正确的解决方案。根据你贴出的关于resize_to_fit的链接:重设图像的最大高度。如果省略,则默认为new_width的值。所以在你的情况下,process: resize_to_fit => [100,nil]等同于process: resize_to_fit => [100,100],这并不能保证你总是会得到固定宽度为100像素的图片。


13

一个更好的解决方案难道不是:

process :resize_to_fit => [100, -1]

这样就完全不需要限制高度

编辑:刚意识到这仅适用于MiniMagick。对于RMagick,您似乎只能将一个较大的数值添加到高度。


请注意,[-1, 100] 不起作用,这意味着您无法创建固定高度的图像缩略图。 - lulalala

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