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
  download_blob_to_tempfile do |file|
    require "ruby-vips"

    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
  end
rescue LoadError
  logger.info "Skipping image analysis because the ruby-vips gem isn't installed"
  {}
rescue ::Vips::Error => error
  logger.error "Skipping image analysis due to an Vips error: #{error.message}"
  {}
end
rotated_image?(image) click to toggle source
# File lib/active_storage/analyzer/image_analyzer/vips.rb, line 36
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 42
def valid_image?(image)
  image.avg
  true
rescue ::Vips::Error
  false
end