Yeg*_*eps 2 ruby rmagick ruby-on-rails-3 carrierwave
你如何缩小图像直到一方用Carrierwave和rmagick达到它的目标维度?
例:
目标尺寸:600x400
正在上传的图片:700x450
我希望缩小此图像,直到高度达到400像素,保持原始高宽比.
这将导致具有以下尺寸的图像:622x400
你可以看看resize_to_limit.来自carrierwave文档:
调整图像大小以适合指定的尺寸,同时保留原始高宽比.仅当图像大于指定尺寸时才会调整图像大小.生成的图像可能比较小尺寸中指定的更短或更窄,但不会大于指定值.
所以你可以在你的上传器中做这样的事情:
process :resize_to_fill => [600, 400]
Run Code Online (Sandbox Code Playgroud)
如果您不介意裁剪图像,可以resize_to_fit改为使用,并使用您想要的重力值:
从RMagick文档:"调整图像大小以适应指定的尺寸,同时保留原始宽高比.图像可能比较小尺寸中指定的更短或更窄,但不会大于指定值."
编辑: 您可以阅读这些处理器的文档,以获取有关调整大小的更多选项
对于resize_to_min仅强制宽度和高度的最小尺寸的实现,您可以将其resize_to_limit作为基础并仅修改几何设置MinimumGeometry以创建自定义处理器:
process :resize_to_min => [600, 400]
def resize_to_min(width, height)
manipulate! do |img|
geometry = Magick::Geometry.new(width, height, 0, 0, Magick::MinimumGeometry)
new_img = img.change_geometry(geometry) do |new_width, new_height|
img.resize(new_width, new_height)
end
destroy_image(img)
new_img = yield(new_img) if block_given?
new_img
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1314 次 |
| 最近记录: |