Class: MiniMagick::Image::Info
- Inherits:
-
Object
- Object
- MiniMagick::Image::Info
- Defined in:
- lib/mini_magick/image/info.rb
Constant Summary collapse
- ASCII_ENCODED_EXIF_KEYS =
%w[ExifVersion FlashPixVersion]
Instance Method Summary collapse
- #[](value, *args) ⇒ Object
- #cheap_info(value) ⇒ Object
- #clear ⇒ Object
- #colorspace ⇒ Object
- #data ⇒ Object
- #exif ⇒ Object
- #identify ⇒ Object
-
#initialize(path) ⇒ Info
constructor
A new instance of Info.
- #parse_warnings(raw_info) ⇒ Object
- #raw(value) ⇒ Object
- #raw_exif(value) ⇒ Object
- #resolution(unit = nil) ⇒ Object
- #signature ⇒ Object
Constructor Details
#initialize(path) ⇒ Info
Returns a new instance of Info.
9 10 11 12 |
# File 'lib/mini_magick/image/info.rb', line 9 def initialize(path) @path = path @info = {} end |
Instance Method Details
#[](value, *args) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/mini_magick/image/info.rb', line 14 def [](value, *args) case value when "format", "width", "height", "dimensions", "size", "human_size" cheap_info(value) when "colorspace" colorspace when "resolution" resolution(*args) when "signature" signature when /^EXIF\:/i raw_exif(value) when "exif" exif when "data" data else raw(value) end end |
#cheap_info(value) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/mini_magick/image/info.rb', line 39 def cheap_info(value) @info.fetch(value) do format, width, height, size = parse_warnings(self["%m %w %h %b"]).split(" ") path = @path path = path.match(/\[\d+\]$/).pre_match if path =~ /\[\d+\]$/ @info.update( "format" => format, "width" => Integer(width), "height" => Integer(height), "dimensions" => [Integer(width), Integer(height)], "size" => File.size(path), "human_size" => size, ) @info.fetch(value) end rescue ArgumentError, TypeError raise MiniMagick::Invalid, "image data can't be read" end |
#clear ⇒ Object
35 36 37 |
# File 'lib/mini_magick/image/info.rb', line 35 def clear @info.clear end |
#colorspace ⇒ Object
71 72 73 |
# File 'lib/mini_magick/image/info.rb', line 71 def colorspace @info["colorspace"] ||= self["%r"] end |
#data ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/mini_magick/image/info.rb', line 116 def data @info["data"] ||= ( json = MiniMagick.convert do |convert| convert << path convert << "json:" end data = JSON.parse(json) data = data.fetch(0) if data.is_a?(Array) data.fetch("image") ) end |
#exif ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/mini_magick/image/info.rb', line 87 def exif @info["exif"] ||= ( hash = {} output = self["%[EXIF:*]"] output.each_line do |line| line = line.chomp("\n") if match = line.match(/^exif:/) key, value = match.post_match.split("=", 2) value = decode_comma_separated_ascii_characters(value) if ASCII_ENCODED_EXIF_KEYS.include?(key) hash[key] = value else hash[hash.keys.last] << "\n#{line}" end end hash ) end |
#identify ⇒ Object
129 130 131 132 133 134 |
# File 'lib/mini_magick/image/info.rb', line 129 def identify MiniMagick.identify do |builder| yield builder if block_given? builder << path end end |
#parse_warnings(raw_info) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/mini_magick/image/info.rb', line 61 def parse_warnings(raw_info) return raw_info unless raw_info.split("\n").size > 1 raw_info.split("\n").each do |line| # must match "%m %w %h %b" return line if line.match?(/^[A-Z]+ \d+ \d+ \d+(|\.\d+)([KMGTPEZY]{0,1})B$/) end raise TypeError end |
#raw(value) ⇒ Object
108 109 110 |
# File 'lib/mini_magick/image/info.rb', line 108 def raw(value) @info["raw:#{value}"] ||= identify { |b| b.format(value) } end |
#raw_exif(value) ⇒ Object
83 84 85 |
# File 'lib/mini_magick/image/info.rb', line 83 def raw_exif(value) self["%[#{value}]"] end |
#resolution(unit = nil) ⇒ Object
75 76 77 78 79 80 81 |
# File 'lib/mini_magick/image/info.rb', line 75 def resolution(unit = nil) output = identify do |b| b.units unit if unit b.format "%x %y" end output.split(" ").map(&:to_i) end |
#signature ⇒ Object
112 113 114 |
# File 'lib/mini_magick/image/info.rb', line 112 def signature @info["signature"] ||= self["%#"] end |