Получение ширины и высоты изображения в модели в Скрепке Ruby GEM

Попытка получить ширину и высоту загруженного изображения, в то время как все еще в модели на начальном сохранении.

Какой-либо способ сделать это?

Вот отрывок кода, с которым я тестировал из моей модели. Конечно, это перестало работать на "экземпляре photo_width".

has_attached_file :photo,
                      :styles => {
                      :original  => "634x471>",
                      :thumb => Proc.new { |instance|                       
                                  ratio = instance.photo_width/instance.photo_height
                                  min_width   = 142
                                  min_height  = 119
                                  if ratio > 1
                                    final_height  = min_height
                                    final_width   = final_height * ratio
                                  else
                                    final_width   = min_width
                                    final_height  = final_width * ratio
                                  end
                                  "#{final_width}x#{final_height}" 
                                }
                    }, 
                    :storage => :s3,
                    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
                    :path => ":attachment/:id/:style.:extension",
                    :bucket => 'foo_bucket' 

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

Какие-либо идеи?

16
задан JakeGould 23 December 2014 в 22:42
поделиться

1 ответ

Ааа, разобрался. Мне просто нужно было сделать proc.

Вот код из моей модели:

class Submission < ActiveRecord::Base

  #### Start Paperclip ####

  has_attached_file :photo, 
                    :styles => {
                      :original  => "634x471>",
                      :thumb => Proc.new { |instance| instance.resize }
                    }, 
                    :storage => :s3,
                    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
                    :path => ":attachment/:id/:style.:extension",
                    :bucket => 'foo_bucket' 

  #### End Paperclip ####

  def resize     
     geo = Paperclip::Geometry.from_file(photo.to_file(:original))

     ratio = geo.width/geo.height  

     min_width  = 142
     min_height = 119

     if ratio > 1
       # Horizontal Image
       final_height = min_height
       final_width  = final_height * ratio
       "#{final_width.round}x#{final_height.round}!"
     else
       # Vertical Image
       final_width  = min_width
       final_height = final_width * ratio
       "#{final_height.round}x#{final_width.round}!"
     end
  end  
end
25
ответ дан 30 November 2019 в 21:36
поделиться
Другие вопросы по тегам:

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