blob: 25e0251e6e70e9c0f23ec936c8699393953ed375 (
plain) (
tree)
|
|
# 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
|