Используя драгоценный камень Paperclip, как изменить размеры стиля, примененного к загруженному, на основе ориентации? - PullRequest
1 голос
/ 07 сентября 2011

Работая с драгоценным камнем Paperclip, я хочу по-разному изменять размеры для каждого стиля, применяемого к загруженному изображению, в зависимости от того, находится ли изображение в альбомной или портретной ориентации.

В основном как-то так:

styles => {
:original => (uploaded_image.width > uploaded_image.height) ? "1000x800>" : :800x1000>",
:medium => (uploaded_image.width > uploaded_image.height) ? "600x400>" : :400x600>",
:thumb => "100x100#"
}

Возможно ли это? И если да, то как это сделать?

Спасибо

1 Ответ

3 голосов
/ 03 октября 2011

Не нашел такой простой синтаксис, как псевдокод, включенный в мой первоначальный вопрос, но я нашел довольно простой способ сделать это.Вот код в моем файле model.rb:

  has_attached_file :cover_image,
                :path => "events/:created_at/event_:model_id/uploads/:basename_:style.:extension",
                :default_url => "placeholders/default_cover_image_:style.png",
                :styles => {
                    :original => Proc.new { |instance| instance.resize_cover_image('original') },
                    :iphone => Proc.new { |instance| instance.resize_cover_image('iphone') },
                    :thumb => "150x150#"
                }

, а затем этот метод "resize_cover_image" следующим образом:

     # will resize each paperclip style and set orientation attribute when working on the :original style
  def resize_cover_image(style)
    geo = Paperclip::Geometry.from_file(cover_image.to_file(:original))

    case style
    when 'original'
      if geo.horizontal? 
        self.cover_image_orientation = 'landscape'
        "1360x910>"
      else
        self.cover_image_orientation = 'portrait'
        "910x1360>"
      end
    when 'iphone'
      geo.horizontal? ? "480x318>" : "318x480>"
    end
  end

Если у кого-то есть что-то лучше или есть полезные комментарии о том, каксделать это лучше ... У меня все уши.

Спасибо -wg

...