class ActiveStorage::Analyzer::ImageAnalyzer::Vips

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

Constants

ROTATIONS

Public Class Methods

accept?(blob) click to toggle source
# File lib/active_storage/analyzer/image_analyzer/vips.rb, line 7
def self.accept?(blob)
  super && ActiveStorage.variant_processor == :vips
end

Private Instance Methods

read_image() { |image| ... } click to toggle source
# File lib/active_storage/analyzer/image_analyzer/vips.rb, line 12
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
rotated_image?(image) click to toggle source
# File lib/active_storage/analyzer/image_analyzer/vips.rb, line 38
def rotated_image?(image)
  ROTATIONS === image.get("exif-ifd0-Orientation")
rescue ::Vips::Error
  false
end
valid_image?(image) click to toggle source
# File lib/active_storage/analyzer/image_analyzer/vips.rb, line 44
def valid_image?(image)
  image.avg
  true
rescue ::Vips::Error
  false
end