Rails的image_tag如何旋转图片

3
我正在使用配置了carrierwave和fog的Amazon S3来进行图像存储。图像似乎被正确地存储,但是当我有一个“纵向”图像(宽度小于高度)时,它不会正确显示,而是将图像旋转到一侧。
非常感谢任何指向正确方向的指针! uploaders/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
我有同样的问题,你找到解决方案了吗? - pingu
2个回答

1
在uploader.rb文件中尝试:
process :auto_orient 

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

它应该修复它。


这个解决方案可以修复新上传的文件。虽然我还在寻找之前上传文件的解决方案,但我不确定能否找到一个。 - Justin Thiele

0
也许,与其尝试使用resize_to_limit缩放图像,不如创建符合您要求的版本。例如,如果您想要所有图片都智能缩小到正方形,您可以尝试以下操作:

从上传器中移除:

process :resize_to_limit => [420, 0]

添加到上传器:

版本 :portrait do 处理 :resize_to_fit => [100, 100] end

这样,CarrierWave 将会存储原始图像,并在您执行以下操作时响应您的调用:

@idea.image_url(:portrait)

假设您的Idea模型挂载了ImageUploader并已经配置好所有其他必要的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接