cartodb-4.42/lib/cartodb/image_metadata.rb
2024-04-06 05:25:13 +00:00

56 lines
1.3 KiB
Ruby

module CartoDB
class ImageMetadata
attr_reader :input_file, :width, :height
def initialize(input_file, extension: nil)
@input_file = input_file
@extension = extension
extract_metadata
end
def extract_metadata
@width = 0
@height = 0
has_magick? ? parse_identify : parse_file
end
def has_magick?
`which identify 2>&1` != ''
end
def parse_identify
identify_command = `which identify`.gsub(/\n/, '')
stdout, status = Open3.capture2(identify_command, identify_file_prefix + input_file)
return unless status == 0
result = stdout.match(/ (\d+)x(\d+) /)
@width = result[1].to_i rescue 0
@height = result[2].to_i rescue 0
end
def parse_file
stdout, status = Open3.capture2('file', input_file)
return unless status == 0
result = stdout.match(/(\d+) x (\d+)/)
@width = result[1].to_i rescue 0
@height = result[2].to_i rescue 0
end
private
def identify_file_prefix
case @extension.to_s.downcase
when '.svg'
# Some SVGs don't have the XML header, and sometimes they don't have the
# svg extension either (lost during upload). In those cases, ImageMagick can't parse
# the file unless we force it.
'svg:'
else
''
end
end
end
end