使用Cloudinary上传处理`auto_orient`

时间:2016-03-23 09:07:16

标签: ruby-on-rails imagemagick carrierwave cloudinary minimagick

我有一个常规文件上传,我现在改为使用Cloudinary。

上传后,我执行以下操作以防止从移动设备上传图片时出现方向故障(有关详细信息,请参阅exif image rotation issue using carrierwave and rmagick to upload to s3):

process :rotate
process :store_dimensions

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

def store_dimensions
  # This does not work with cloudinary #18

  if file && model
    model.width, model.height = ::MiniMagick::Image.open(file.file)[:dimensions]
  end
end

由于我切换到cloudinary,因此旋转和存储尺寸都不起作用。

现在Cloudinary有an official tutuorial显示如何执行此操作,但它根本不起作用,而其他人似乎也有同样的问题,并且所提供的选项都不适用于我:

1 个答案:

答案 0 :(得分:0)

我能够使用第一个选项的变体来使其工作:

  after_save :update_dimensions

  def update_dimensions
    if self.image != nil && self.image.metadata.present?
      width = self.image.metadata["width"]
      height = self.image.metadata["height"]

      self.update_column(:width, width)
      self.update_column(:height, height)

    end
  end

重要:由于我们在after_save回调中,因此使用update_column至关重要,这样我们就不会触发另一个回调并以无限循环结束。

修复所提供的解决方案

self.image.present?返回falseself.image != nil退回true