56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/identify.rb', line 56
def parse data
endian = data[0..1] == "MM" ? 'n' : 'v'
offset = data.unpack("x4#{endian.upcase}").first
return {} if data.bytesize < offset + 14
nrec = data[offset, 2].unpack(endian).first
offset += 2
height = nil
width = nil
types = [nil, 'C', nil, endian, endian.upcase]
while nrec > 0 && data.bytesize > offset + 12
ifd = data[offset, 12]
type = ifd.unpack("x2#{endian}").first
case ifd.unpack(endian).first
when 0x0100
width = ifd[8, 4].unpack(types[type]).first
when 0x0101
height = ifd[8, 4].unpack(types[type]).first
end
nrec -= 1
offset += 12
break if width && height
end
as_hash 'tiff', width, height
end
|