exif image rotation issue using carrierwave and rmagick to upload to s3 exif image rotation issue using carrierwave and rmagick to upload to s3 ruby-on-rails ruby-on-rails

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):