# frozen_string_literal: true module ActiveStorage # Extracts width and height in pixels from an image blob. # # Example: # # ActiveStorage::Analyzer::ImageAnalyzer.new(blob).metadata # # => { width: 4104, height: 2736 } # # This analyzer relies on the third-party [MiniMagick]{https://github.com/minimagick/minimagick} gem. MiniMagick requires # the [ImageMagick]{http://www.imagemagick.org} system library. These libraries are not provided by Rails; you must # install them yourself to use this analyzer. class Analyzer::ImageAnalyzer < Analyzer def self.accept?(blob) blob.image? end def metadata read_image do |image| { width: image.width, height: image.height } end rescue LoadError logger.info "Skipping image analysis because the mini_magick gem isn't installed" {} end private def read_image download_blob_to_tempfile do |file| require "mini_magick" yield MiniMagick::Image.new(file.path) end end end end