Я пытаюсь изменить размер изображения с Rmagick и если я использую resize_to_fit
метод, чтобы всегда изменить размер высоты сначала, предпочитая, чтобы к ширине, но казалось, как будто большинство моих изображений изменяется к ширине сначала. Там так или иначе использует resize_to_fit
метод для сообщения это "предпочитает высоту по ширине"?
Несколько мыслей и код.
Какие различия вы видите? Как сначала определить ширину? Я не вижу случая, когда конечный результат должен быть другого размера, если это проблема качества, пример может помочь.
Не похоже, что api предоставляет способ растягивания в одну сторону, а затем в другую, но мы, безусловно, можем создать один или два метода, чтобы попробовать. Ниже описаны два подхода: первый two_step_resize изменяет размер в одном направлении и в другом. Второй, resize_with_rotate , поворачивает изображение, изменяет его размер, а затем поворачивает обратно.
Что касается примеров, которые я рассмотрел, я не вижу странностей ни в одном из решений.
require 'RMagick'
#Change the size in two steps, height first then width
def two_step_resize(img, filename, max_x, max_y)
x = img.columns
y = img.rows
#make sure it's a float w/ the 1.0*
ratio = (1.0*x)/y
new_y = max_y
new_x = ratio * new_y
if (new_x > max_x)
new_x = max_x
new_y = new_x / ratio
end
# do the change in two steps, first the height
img.resize!(x, new_y);
#then the width
img.resize!(new_x, new_y)
#save it, with the least compression to get a better image
res.write(filename){self.quality=100}
end
#spin the image before resizing
def resize_with_rotate(img, output_filename, max_x, max_y)
res = img.rotate(90).resize_to_fit(max_y, max_x).rotate(-90)
res.write(output_filename){self.quality=100}
end
img = Magick::Image.read(filename).first
two_step_resize(img, "2-step.jpg", 100, 200)
img = Magick::Image.read(filename).first
resize_with_rotate(img, "rotate.jpg", 100, 200)