Class: Imagut::NefParser

Inherits:
Object
  • Object
show all
Defined in:
lib/imagut/nefparser.rb

Overview

Nikon NEF ファイルのなんちゃってパーサ。

Defined Under Namespace

Classes: NotNefError, TypeError

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeNefParser

Returns a new instance of NefParser.



12
13
# File 'lib/imagut/nefparser.rb', line 12

def initialize
end

Class Method Details

.read_taken_date(file) ⇒ Object



42
43
44
45
46
47
# File 'lib/imagut/nefparser.rb', line 42

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

.taken_date(data) ⇒ Object

撮影日時を返す(つもり)。

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



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/imagut/nefparser.rb', line 25

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

Instance Method Details

#taken_date(data) ⇒ Object



50
51
52
# File 'lib/imagut/nefparser.rb', line 50

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