質問

できればペーパークリップを使用して画像の方向を決定する方法を探していますが、それは可能ですか、それともこれには RMagick または別の画像ライブラリを使用する必要がありますか?

ケースシナリオ:ユーザーが画像をアップロードするときに、方向/サイズ/寸法をチェックして、画像が縦向き/横向きか正方形であるかを判断し、この属性をモデルに保存したいと考えています。

役に立ちましたか?

解決

私が画像モデルで一般的に行っていることは次のとおりです。おそらくそれは役立つでしょう:

  • 変換時には IM の -auto-orient オプションを使用します。これにより、アップロード後に画像が常に適切に回転されるようになります。
  • 私が読んだのは、 EXIFデータ 処理後、幅と高さを(とりわけ)取得します
  • 次に、幅と高さに基づいて向きの文字列を出力するインスタンス メソッドを作成するだけです。
has_attached_file :attachment, 
  :styles => {
    :large => "900x600>",
    :medium => "600x400>",
    :square => "100x100#", 
    :small => "300x200>" },
  :convert_options => { :all => '-auto-orient' },   
  :storage => :s3,
  :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
  :s3_permissions => 'public-read',
  :s3_protocol => 'https',
  :path => "images/:id_partition/:basename_:style.:extension"

after_attachment_post_process  :post_process_photo 

def post_process_photo
  imgfile = EXIFR::JPEG.new(attachment.queued_for_write[:original].path)
  return unless imgfile

  self.width         = imgfile.width             
  self.height        = imgfile.height            
  self.model         = imgfile.model             
  self.date_time     = imgfile.date_time         
  self.exposure_time = imgfile.exposure_time.to_s
  self.f_number      = imgfile.f_number.to_f     
  self.focal_length  = imgfile.focal_length.to_s
  self.description   = imgfile.image_description
end

他のヒント

回答jonniiてくれてありがとう。

私はペーパークリップ::ジオメトリモジュールに私が探していたものを見つけたもののます。

これは見つける働いていました

class Image < ActiveRecord::Base
  after_save :set_orientation

  has_attached_file :data, :styles => { :large => "685x", :thumb => "100x100#" }
  validates_attachment_content_type :data, :content_type => ['image/jpeg', 'image/pjpeg'], :message => "has to be in jpeg format"

  private
  def set_orientation
    self.orientation = Paperclip::Geometry.from_file(self.data.to_file).horizontal? ? 'horizontal' : 'vertical'
  end
end

もちろんこれは、両方の垂直および正方形の画像が縦属性を持っていますが、それは私はとにかく望んでいたものです。

カメラで写真を撮ると、写真が横向きか縦向きかに関係なく、画像のサイズは同じになります。ただし、私のカメラは画像を回転させるのに十分な機能を備えています。なんて思慮深いのでしょう!この作業では、と呼ばれるものを使用します。 exif data これはカメラによって画像に配置されるメタデータです。これには次のようなものが含まれます。カメラの種類、写真を撮った時期、 オリエンテーション 等...

ペーパークリップを使用すると、コールバックを設定できます。具体的には、コールバックを設定することです。 before_post_process ライブラリを使用して exif データを読み取ることで画像の向きをチェックします (リストはここにあります: http://blog.simplificator.com/2008/01/14/ruby-and-exif-data/)、画像を時計回りまたは反時計回りに 90 度回転します (写真を撮ったときにカメラをどちらに回転させたかはわかりません)。

これがお役に立てば幸いです!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top