class ActiveStorage::Analyzer::ImageAnalyzer::Vips

the libvips system library.
This analyzer relies on the third-party ruby-vips gem. Ruby-vips requires

def self.accept?(blob)

def self.accept?(blob)
  super && ActiveStorage.variant_processor == :vips
end

def read_image

def read_image
  begin
    require "ruby-vips"
  rescue LoadError
    logger.info "Skipping image analysis because the ruby-vips gem isn't installed"
    return {}
  end
  download_blob_to_tempfile do |file|
    image = instrument("vips") do
      ::Vips::Image.new_from_file(file.path, access: :sequential)
    end
    if valid_image?(image)
      yield image
    else
      logger.info "Skipping image analysis because Vips doesn't support the file"
      {}
    end
  rescue ::Vips::Error => error
    logger.error "Skipping image analysis due to an Vips error: #{error.message}"
    {}
  end
end

def rotated_image?(image)

def rotated_image?(image)
  ROTATIONS === image.get("exif-ifd0-Orientation")
rescue ::Vips::Error
  false
end

def valid_image?(image)

def valid_image?(image)
  image.avg
  true
rescue ::Vips::Error
  false
end