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