Сжатие изображений Rails Paperclip по сравнению с тем, что производит Page Speed - PullRequest
6 голосов
/ 02 июля 2011

Я установил скрепку в рельсах, и все работает как надо (я действительно должен был гуглить это ... :)сжать мои миниатюры и большие изображения (те, которые производит скрепка) дальше.Есть ли вариант, который я могу добавить в свою модель, которая делает это?Я заметил, что mod_deflate не сжимает изображения (я использую Firefox).

Ответы [ 3 ]

10 голосов
/ 08 января 2013

Вы можете добавить сжатие к обработке скрепки, используя скрепку для сжатия .

В вашем Gemfile:

gem "paperclip-compression", "~> 0.1.1"

(конечно, запустите пакетную установку)

В вашей модели:

has_attached_file :avatar,
                :styles     => { :medium => "300x300>", :thumb => "100x100>" },
                :processors => [:thumbnail, :compression]

" jpegtran работает путем переупорядочения сжатых данных (коэффициентов DCT) без полного декодирования изображения. Следовательно, его преобразования без потерь "

Примечание: если вы работаете на heroku, вам потребуется jpegtran и optipng бинарные файлы, добавленные в ваше приложение. Вот хорошая статья о запуске бинарных файлов на героку .

1 голос
/ 02 июля 2011

Вам следует провести собственное тестирование на различных уровнях сжатия JPEG, но я заметил, что могу снизить настройку качества ImageMagicks до 75 и при этом не заметить заметных различий - примерно 30-40% экономии размера файла.

Моя модель выглядит так:

  has_attached_file :photo,
    :styles => {
      :"185x138" => {
        :geometry => "185x138>"
      }    },
    :convert_options => {
      :all => "-auto-orient",
      :"185x138" => "-quality 75",

-quality 75 для ImageMagick. Если вы используете другой процессор, вам необходимо настроить его соответствующим образом.

0 голосов
/ 04 октября 2013

А как насчет FFMPEG или AVCONV?

sudo apt-get install ffmpeg/avconv

= инициализатор

Paperclip.options[:command_path] = "/usr/bin/" # see `which ffmpeg`

= Модал

after_save :compress_with_ffmpeg

def compress_with_ffmpeg
  [:thumb, :original, :medium].each do |type|
    img_path = self.avtar.path(type)
    Paperclip.run("ffmpeg", " -i #{img_path} #{img_path}")
  end
end
...