Используя Rmagick для изменения размеров высоты сначала

Я пытаюсь изменить размер изображения с Rmagick и если я использую resize_to_fit метод, чтобы всегда изменить размер высоты сначала, предпочитая, чтобы к ширине, но казалось, как будто большинство моих изображений изменяется к ширине сначала. Там так или иначе использует resize_to_fit метод для сообщения это "предпочитает высоту по ширине"?

5
задан knut 24 May 2017 в 13:09
поделиться

1 ответ

Несколько мыслей и код.

Какие различия вы видите? Как сначала определить ширину? Я не вижу случая, когда конечный результат должен быть другого размера, если это проблема качества, пример может помочь.

Не похоже, что 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)
3
ответ дан 18 December 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: