123456789_123456789_123456789_123456789_123456789_

Class: ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: ActiveStorage::Analyzer::ImageAnalyzer
Defined in: activestorage/lib/active_storage/analyzer/image_analyzer/image_magick.rb

Overview

This analyzer relies on the third-party MiniMagick gem. MiniMagick requires the ImageMagick system library.

Class Attribute Summary

::ActiveStorage::Analyzer - Inherited

.analyze_later?

Implement this method in concrete subclasses.

Class Method Summary

::ActiveStorage::Analyzer::ImageAnalyzer - Inherited

::ActiveStorage::Analyzer - Inherited

.accept?

Implement this method in a concrete subclass.

.new

Instance Attribute Summary

Instance Method Summary

::ActiveStorage::Analyzer::ImageAnalyzer - Inherited

::ActiveStorage::Analyzer - Inherited

#metadata

Override this method in a concrete subclass.

#download_blob_to_tempfile

Downloads the blob to a tempfile on disk.

#instrument, #logger, #tmpdir

Constructor Details

This class inherits a constructor from ActiveStorage::Analyzer

Class Method Details

.accept?(blob) ⇒ Boolean

[ GitHub ]

  
# File 'activestorage/lib/active_storage/analyzer/image_analyzer/image_magick.rb', line 7

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

Instance Method Details

#read_image (private)

[ GitHub ]

  
# File 'activestorage/lib/active_storage/analyzer/image_analyzer/image_magick.rb', line 12

def read_image
  begin
    require "mini_magick"
  rescue LoadError
    logger.info "Skipping image analysis because the mini_magick gem isn't installed"
    return {}
  end

  download_blob_to_tempfile do |file|
    image = instrument("mini_magick") do
      MiniMagick::Image.new(file.path)
    end

    if image.valid?
      yield image
    else
      logger.info "Skipping image analysis because ImageMagick doesn't support the file"
      {}
    end
  rescue MiniMagick::Error => error
    logger.error "Skipping image analysis due to an ImageMagick error: #{error.message}"
    {}
  end
end

#rotated_image?(image) ⇒ Boolean (private)

[ GitHub ]

  
# File 'activestorage/lib/active_storage/analyzer/image_analyzer/image_magick.rb', line 37

def rotated_image?(image)
  %w[ RightTop LeftBottom TopRight BottomLeft ].include?(image["%[orientation]"])
end