できればPaperclipを使用して画像の向きを決定する方法を探していますが、それは可能ですか、それともRMagickまたは別の画像ライブラリを使用する必要がありますか?
ケース シナリオ: ユーザーが画像をアップロードするときに、向き/サイズ/寸法をチェックして、画像が縦向き/横向きか正方形かを判断し、この属性をモデルに保存したいと考えています。
できればPaperclipを使用して画像の向きを決定する方法を探していますが、それは可能ですか、それともRMagickまたは別の画像ライブラリを使用する必要がありますか?
ケース シナリオ: ユーザーが画像をアップロードするときに、向き/サイズ/寸法をチェックして、画像が縦向き/横向きか正方形かを判断し、この属性をモデルに保存したいと考えています。
これが私の画像モデルで一般的に行うことです。おそらくそれは役立つでしょう:
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
答えてくれてありがとう
PaperClip::Geometry モジュールで探していたものを見つけましたが。
これはうまくいきました:
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
、カメラが画像に載せるメタデータと呼ばれるものを使っています。これには、カメラの種類、写真が撮影された時期、向きなどの情報が含まれます。
paperclip を使用すると、コールバックを設定できます。具体的にはbefore_post_process
、ライブラリを使用して exif データを読み取って画像の向きをチェックするコールバックを設定する必要があります (リストはhttp://blog. simplificator.com/2008/01/14/ruby-and-exif-data/ )、次に画像を時計回りまたは反時計回りに 90 度回転します (写真を撮ったときにカメラをどちらに回転させたかはわかりません)。
これが役立つことを願っています!