class ActiveAnalysis::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_analysis/analyzer/image_analyzer/vips.rb, line 9
def self.accept?(blob)
  super && ActiveAnalysis.image_library == :vips
end

Private Instance Methods

opaque?(image) click to toggle source
# File lib/active_analysis/analyzer/image_analyzer/vips.rb, line 42
def opaque?(image)
  return true unless image.has_alpha?
  image[image.bands - 1].min == 255
end
read_image() { |image| ... } click to toggle source
# File lib/active_analysis/analyzer/image_analyzer/vips.rb, line 14
def read_image
  download_blob_to_tempfile do |file|
    require "ruby-vips"
    image = ::Vips::Image.new_from_file(file.path)

    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_analysis/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_analysis/analyzer/image_analyzer/vips.rb, line 47
def valid_image?(image)
  image.avg
  true
rescue ::Vips::Error
  false
end