Вы можете взглянуть на resize_to_limit
. Из документов перевозчика:
Изменение размера изображения в соответствии с указанными размерами при сохранении исходного соотношения сторон. Изменит размер изображения, только если оно больше указанного размера. Результирующее изображение может быть короче или уже, чем указано в меньшем измерении, но не будет больше указанных значений.
Так что вы можете сделать что-то подобное в своем загрузчике:
process :resize_to_fill => [600, 400]
Если вы не возражаете, чтобы обрезать изображение, вы можете вместо этого выбрать resize_to_fit
и использовать желаемое значение гравитации:
Из документации RMagick: «Измените размер изображения в соответствии с указанными размерами, сохранив исходное соотношение сторон. Изображение может быть короче или уже, чем указано в меньшем измерении, но не может быть больше указанных значений. «
Edit:
Вы можете прочитать документацию для этих процессоров, чтобы узнать больше об изменениях размера
Для реализации 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