# File lib/tiff.rb, line 306
    def initialize(file)
      data = file.respond_to?(:read) ? file.read : File.open(file, 'rb') { |io| io.read }

      class << data
        attr_accessor :short, :long
        def readshort(pos); self[pos..(pos + 1)].unpack(@short)[0]; end
        def readlong(pos); self[pos..(pos + 3)].unpack(@long)[0]; end
      end

      case data[0..1]
      when 'II'; data.short, data.long = 'v', 'V'
      when 'MM'; data.short, data.long = 'n', 'N'
      else; raise 'no II or MM marker found'
      end

      @ifds = [IFD.new(data)]
      while ifd = @ifds.last.next
        break if @ifds.find{|i| i.offset == ifd.offset}
        @ifds << ifd
      end

      @jpeg_thumbnails = @ifds.map do |ifd|
        if ifd.jpeg_interchange_format && ifd.jpeg_interchange_format_length
          start, length = ifd.jpeg_interchange_format, ifd.jpeg_interchange_format_length
          data[start..(start + length)]
        end
      end.compact
    end