# frozen_string_literal: true module ActiveStorage # This is an abstract base class for image analyzers, which extract width and height from an image blob. # # If the image contains EXIF data indicating its angle is 90 or 270 degrees, its width and height are swapped for convenience. # # Example: # # ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick.new(blob).metadata # # => { width: 4104, height: 2736 } class Analyzer::ImageAnalyzer < Analyzer def self.accept?(blob) blob.image? end def metadata read_image do |image| if rotated_image?(image) { width: image.height, height: image.width } else { width: image.width, height: image.height } end end end end end