Скрепка: Как изменить размер изображения, только если оно достаточно большое? - PullRequest
8 голосов
/ 18 июля 2011

Я использую Скрепку, чтобы изменить размеры картинок как это:

class Asset < ActiveRecord::Base
  has_attached_file :asset, :styles => { :thumb => "80x80#", 
                                         :medium => "1280x800>" }, ...

Когда размер исходного изображения 32x32:

  1. Полученное medium изображение имеет тот же размер (т.е. 32x32), но файл немного отличается, и изображение выглядит немного измененным Почему это?

  2. Результирующий размер thumb равен 80x80 (он выглядит растянутым, чтобы соответствовать этому размеру). Как я могу избежать изменения размера изображения, когда оно слишком маленькое. Предположим, что размеры исходного изображения находятся в переменных width и height.

1 Ответ

6 голосов
/ 18 июля 2011

(1) Возможно, потому что Paperclip декодирует JPEG, а затем записывает / кодирует новый JPEG. JPEG - это формат с потерями, поэтому каждая кодировка ухудшает изображение. Вы можете использовать convert_options для настройки качества JPEG , но вам, вероятно, придется принять некоторое ухудшение качества JPEG.

(2) потому что Скрепка делает так, как ей говорят. Скрепка использует ImageMagick для выполнения тяжелых работ, а размеры стиля - это просто Геометрические струны ImageMagick с одна модификация :

Скрепка также добавляет опцию «#» (например, «50x50 #»), которая изменит размер изображения, чтобы он максимально соответствовал размерам, а затем обрежет все остальное (взвешенный в центре).

Ваш стиль :thumb использует "#", поэтому вы говорите Paperclip, что вам нужно изображение 80x80, даже если оно должно быть масштабировано и обрезано. Вы можете удалить «#» из строки измерений и, если необходимо или уместно, добавить один из других модификаторов .

...