# Extracts width and height in pixels 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.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.
defmodule ActiveStorage.Analyzer.ImageAnalyzer do
def accept?(blob) do
blob.image?
end
def metadata(_blob) do
# read_image do |image|
# if rotated_image?(image)
# { width: image.height, height: image.width }
# else
# { width: image.width, height: image.height }
# end
# end
end
def read_image(_blob) do
# download_blob_to_tempfile do |file|
# require "mini_magick"
# image = MiniMagick::Image.new(file.path)
# if image.valid?
# yield image
# else
# logger.info "Skipping image analysis because ImageMagick doesn't support the file"
# {}
# end
# end
# rescue LoadError
# logger.info "Skipping image analysis because the mini_magick gem isn't installed"
# {}
# rescue MiniMagick::Error => error
# logger.error "Skipping image analysis due to an ImageMagick error: #{error.message}"
# {}
end
def rotated_image?(image) do
["RightTop", "LeftBottom"] |> Enum.member?(image["%[orientation]"])
end
end