Rails carrierwave 和 minimagick 只允许横向图像

Rails carrierwave and minimagick allow landscape image only

是否可以在图片上传时验证图片方向? 我希望该用户只能上传横向图片。

谢谢

mount_uploader :photo, PhotoUploader

validate :check_landscape

def check_landscape
  if photo.width<photo.height
     errors.add :photo, "is not a landscape." 
     puts "Error ! not a Landscape Image"
  else if photo.width>photo.height
     puts " Landscape Image"
  end
  end
end

如果您正在寻找 active_storage has_many_attached

has_many_attached :images


validate: active_storage_many_images

 def active_storage_many_images
    images.each do |image|

    image.blob.analyze unless image.blob.analyzed?
    width = image.blob.metadata[:width]
    height = image.blob.metadata[:height]

    if width<height
      errors.add :image, "Additional images are not landscape"
      puts "ACTIVE STORAGE IMAGE ERROR !!"
    end
  end
 end

所以您在这里只需要图像的 EXIF 元数据。我看到一个 gem 可以帮助我们从上传的图像中获取元数据,在这种情况下它似乎可以帮助你

https://github.com/gzigzigzeo/carrierwave-meta

基本上,我们可以获得 image_size 的大小,然后创建一个依赖于它的验证。