exif image rotation issue using carrierwave and rmagick to upload to s3
Well I got this working using fog instead or carrierwave_direct.
Below is the code that ended up working for me:
app/uploaders/image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick include Sprockets::Helpers::RailsHelper include Sprockets::Helpers::IsolatedHelper storage :fog # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def fix_exif_rotation #this is my attempted solution manipulate! do |img| img.tap(&:auto_orient) end end process :fix_exif_rotationend
app/models/s3_image.rb
class S3Image < ActiveRecord::Base attr_accessible :image, :name, :user_id, :image_cache mount_uploader :image, ImageUploader belongs_to :userend
initializers/carrierwave.rb
CarrierWave.configure do |config| config.fog_credentials = { provider: "AWS", aws_access_key_id: " ... ", aws_secret_access_key: " ... ", region: 'us-west-2' } config.fog_directory = " ... "end
I had a similar problem and fixed it with an approach nearly identical to yours.
# In the uploader:def auto_orient manipulate! do |img| img = img.auto_orient endend
(Note that I am not calling auto_orient!
- just auto_orient
, without the bang.)
Then I have process :auto_orient
as the first line of any version
I create. For example:
version :square do process :auto_orient process :resize_to_fill => [600, 600]end
My solution (quite similar to Sumeet) :
# painting_uploader.rbprocess :right_orientationdef right_orientation manipulate! do |img| img.auto_orient img endend
It's really important to return an image. Otherwise, you'll get an
NoMethodError (undefined method `write' for "":String):