lib/tiff.rb in exifr-0.10.9 vs lib/tiff.rb in exifr-1.0.0
- old
+ new
@@ -1,6 +1,6 @@
-# Copyright (c) 2007, 2008, 2009 - R.W. van 't Veer
+# Copyright (c) 2007, 2008, 2009, 2010 - R.W. van 't Veer
require 'rational'
module EXIFR
# = TIFF decoder
@@ -253,10 +253,15 @@
# Field value.
def to_i
@value
end
+ # Debugging output.
+ def inspect
+ "\#<EXIFR::TIFF::Orientation:#{@type}(#{@value})>"
+ end
+
# Rotate and/or flip for proper viewing.
def transform_rmagick(img)
case @type
when :TopRight ; img.flop
when :BottomRight ; img.rotate(180)
@@ -403,20 +408,19 @@
def width; image_width; end
def height; image_length; end
def to_hash
- @hash ||= begin
- result = @fields.dup
- result.delete_if { |key,value| value.nil? }
- result.each do |key,value|
- if IFD_TAGS.include? key
- result.merge!(value.to_hash)
- result.delete key
- end
+ @hash ||= @fields.map do |key,value|
+ if value.nil?
+ {}
+ elsif IFD_TAGS.include?(key)
+ value.to_hash
+ else
+ {key => value}
end
- end
+ end.inject { |m,v| m.merge(v) } || {}
end
def inspect
to_hash.inspect
end
@@ -457,18 +461,18 @@
case @type
when 1, 6 # byte, signed byte
# TODO handle signed bytes
len, pack = count, proc { |d| d }
when 2 # ascii
- len, pack = count, proc { |d| d.strip }
+ len, pack = count, proc { |d| d.unpack("A*") }
when 3, 8 # short, signed short
# TODO handle signed
len, pack = count * 2, proc { |d| d.unpack(data.short + '*') }
when 4, 9 # long, signed long
# TODO handle signed
len, pack = count * 4, proc { |d| d.unpack(data.long + '*') }
when 7 # undefined
- # UserComment
+ # UserComment
if @tag == 0x9286
len, pack = count, proc { |d| d.strip }
len -= 8 # reduce to account for first 8 bytes
start = len > 4 ? @offset + 8 : (pos + 8) # UserComment first 8-bytes is char code
@value = [pack[data[start..(start + len - 1)]]].flatten