2013-10-03 45 views
3

我正在使用亚马逊的S3进行配置了carrierwave和fog的图像存储。这些图像似乎可以正确存储,但是当我有一幅“肖像”图像(宽度小于高度)时,图像显示不正确,而是旋转图像。Rails image_tag旋转图像

任何指针正确的方向将不胜感激!

上传/ image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base 
    include CarrierWave::RMagick 

    include Sprockets::Helpers::RailsHelper 
    include Sprockets::Helpers::IsolatedHelper 

    storage :fog 

    include CarrierWave::MimeTypes 
    process :set_content_type 

    process :resize_to_limit => [420, 0] 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    def extension_white_list 
    %w(jpg jpeg png) 
    end 

end 

show.html.haml

= image_tag(@idea.image_attachments.first.image.url).to_s 

image_attachment.rb

class ImageAttachment < ActiveRecord::Base 
    require 'carrierwave/orm/activerecord' 
    attr_accessible :image, :description 
    belongs_to :image_attachable, polymorphic: true 
    mount_uploader :image, ImageUploader 
end 
+1

这似乎是来自iPhone的图像的问题,并且具有与它们相关联的exif(方向)数据。 – pjabbour

+0

我有这个确切的问题,你找到一个解决方案? – pingu

回答

0

也许,而不是试图resize_to_limit,而是创建一个版本你想遵守。例如,如果你想要的所有照片以“智能”缩减到一个广场,你可以做这样的事情

从上传中删除:

process :resize_to_limit => [420, 0] 

添加到上传者:

版本:肖像做 过程:resize_to_fit => [100,100] 结束

这样,carrierwave将存储原始图像,然后也会回应你的电话,当你做这样的事情:

@idea.image_url(:portrait) 

这是假设您的Idea模型挂载了您的ImageUploader并且已经配置了所有其他必需的东西。

在uploader.rb文件
0

,尝试

process :auto_orient 

def auto_orient 
manipulate! do |image| 
    image.tap(&:auto_orient) 
end 
end 

它应该修复它。