Rails回形针和颠倒的图像

时间:2012-03-04 20:46:12

标签: ruby-on-rails-3 paperclip orientation

我最近遇到了一个问题,即用户上传了一张图片并且在某处某处,回形针正在翻转它。

可以在此处查看相关图片http://photoramblr.com/photos/36

如您所见,图像是颠倒的;但是将图像拖到桌面上它会出现在正确的位置。由于此图像是在iPhone上拍摄的,因此我只能假设这与iPhone上图像的方向设置有关。有没有人遇到过这样的问题,或者对如何解决这个问题有任何建议?

这里的代码是非常简单的Paperclip术语:

class Photo < ActiveRecord::Base
  has_attached_file :image,
    :storage => :s3,
    :s3_credentials => S3_CREDENTIALS,
    :styles => {
      :thumb => "100x100#",
      :small => "138x138>",
      :large => "580x580>",
      :x_large => "1600x1600>"}

更新

嗯,我能够通过拍摄图像的截图并上传它来解决这个问题。元数据中肯定有一些东西正在设置正确的方向,而这些方向并没有完成。

4 个答案:

答案 0 :(得分:11)

是的,这是我们上周解决的问题。 :)如果您使用ImageMagick / RMagic进行图像处理,可以使用Image#auto_orient to "rotate or flip the image based on the image's EXIF orientation tag";在Paperclip处理器中对图像调用此方法,您应该好好去。

[编辑]

您可能对Rails, Paperclip, -auto-orient, and resizing...感兴趣。我还发现有趣的是CarrierWave使这个过程非常简单:

class ImageUploader < CarrierWave::Uploader::Base
  ... # config here

  process :rotate

  def rotate
    manipulate! do |image|
      image.auto_orient
    end
  end
end

答案 1 :(得分:5)

源文件选项

Paperclip添加了source_file_options,允许您传递直接应用于源文件的处理器选项, 生成后续缩略图和样式。

您可以添加此项以自动定位源文件,如下所示:

class Photo < ActiveRecord::Base
  has_attached_file :image,
    storage:             :s3,
    s3_credentials:      S3_CREDENTIALS,
    source_file_options: { all:     '-auto-orient' },
    styles:              { thumb:   "100x100#",
                           small:   "138x138>",
                           large:   "580x580>",
                           x_large: "1600x1600>" }

这应该从gem的2.3.16版本开始提供。

有关详细信息,请参阅Paperclip&#39; Github回购中的以下问题:

https://github.com/thoughtbot/paperclip/issues/591

原创风格

设置original样式以创建面向自动和尺寸限制的版本也不是一个糟糕的主意,如下所示:

original: "5000x5000>"

注意但是,如果您希望上传不仅仅是图片(如PDF),则会因为不保留原始PDF而只是存储图像而导致问题PDF的第一页。

答案 2 :(得分:0)

这是最终对我有用的解决方案:

process :rotate
def rotate
  manipulate! do |img|
    img.auto_orient
    img = yield(img) if block_given?
    img
  end
end

答案 3 :(得分:0)

只需将原作:{convert_options:&#39; -auto-orient&#39;}添加到您喜欢的风格中

has_attached_file :image,
:storage => :s3,
:s3_credentials => S3_CREDENTIALS,
:styles => {original: {convert_options: '-auto-orient'},
  :thumb => "100x100#",
  :small => "138x138>",
  :large => "580x580>",
  :x_large => "1600x1600>"}