Sha256: 6b8053f77058c154e09ff9db0735ecb95376dfd1037b2f8a6fede6bb4f7dd83a

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

#! /usr/bin/env ruby
# coding: utf-8

#
# Nikon NEF ファイルのなんちゃってパーサ。
#
class Imagut::NefParser
    class NotNefError < StandardError; end
    class TypeError < StandardError; end

    #
    def initialize
    end

    # 撮影日時を返す(つもり)。
    #
    # 頑張って解析はしてない。
    # 日付と思われる部分だけ抽出している。
    # 解析には 372+19 = 391 バイトあれば足りる。
    # サンプル NEF ファイルに撮影日時と思しき文字列は 4つあるけど、
    # 詳細が分かるまではとりあえず最初の1個のみ Time object にして返す。
    # a19 の部分が時刻の文字列。
    # 4つあるんだけど、それぞれの差異 or 冗長なのかが分からない。
    # 引数 data は File.read で読まれるような文字列
    def self.taken_date(data)
        unless data.is_a?(String)
            message = "Not string data. Use File#read, not File#readlines."
            raise TypeError, message
        end

        datetime_str = data.unpack("a372a19a57a19a397a19a1a19")[1]
        #p datetime_str
        #p datetime_str.split(/[ :]/)
        begin
            @date = Time.mktime( * datetime_str.split(/[ :]/) )
        rescue
            raise NotNefError, "Cannot find taken time. (#{datetime_str})"
        end
        return @date
    end

    def self.read_taken_date(file)
        data = File.read(file)
        result = self.taken_date(data)
        #pp result
        result
    end


    def taken_date(data)
        self.class.taken_date(data)
    end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
imagut-0.0.4 lib/imagut/nefparser.rb