Rails 5.2 ActiveStorage保存然后读取Exif数据

时间:2018-12-18 16:54:42

标签: ruby-on-rails ruby image-processing rails-activestorage minimagick

在Rails 5.2上,我试图通过ActiveStorage保存一个化身,但似乎未在活动存储Blob中保存图像整理数据。

我正在通过创建动作我的file_field保存化身

#user model 

has_one_attached :avatar

private

def avatar_validation
  if avatar.attached?
    if avatar.blob.byte_size > 1000000
      avatar.purge
      errors.add(:avatar, 'file is too large')
    elsif !avatar.blob.content_type.in?(%w[image/png image/jpg 
          image/jpeg])
      avatar.purge
      errors.add(:avatar, 'file type needs to be JPEG, JPG, or PNG')
    end
  end
end

我一直在阅读minimagick https://github.com/minimagick/minimagick的一些文档,但还没有弄清楚如何关联

user.avatar.blob 

image = MiniMagick::Image.open("input.jpg")

我尝试过

image = MiniMagick::Image.open("user.avatar.blob")

但是没有运气

我需要尝试解决这个问题,因为一些存储在活动存储中的化身会旋转90度显示。

https://edgeguides.rubyonrails.org/active_storage_overview.html 关于图像处理的话题,但是我对Gems Rails的建议也没有好运

1 个答案:

答案 0 :(得分:1)

我认为您想在显示图像时使用一种变体,而不是尝试编辑存储的图像。要确定方向,您可以说:

std::shared_ptr

如果要一次(而不是在管道中)执行多个操作,请使用user.avatar.variant(auto_orient: true)

combine_options

编辑后的图像将被缓存,因此您仅在首次访问时进行转换。您可能希望将user.avatar.variant(combine_options: { auto_orient: true, gravity: 'center', resize: '23x42', # Using real dimensions of course. crop: '23x42+0+0' }) 放到视图助手中(或者根据您的需要甚至考虑模型问题),以便隔离噪音。

您可能希望参考API文档以及指南: