Class: Imagut::NefParser
- Inherits:
-
Object
- Object
- Imagut::NefParser
- Defined in:
- lib/imagut/nefparser.rb
Overview
Nikon NEF ファイルのなんちゃってパーサ。
Defined Under Namespace
Classes: NotNefError, TypeError
Class Method Summary collapse
- .read_taken_date(file) ⇒ Object
-
.taken_date(data) ⇒ Object
撮影日時を返す(つもり)。.
Instance Method Summary collapse
-
#initialize ⇒ NefParser
constructor
A new instance of NefParser.
- #taken_date(data) ⇒ Object
Constructor Details
#initialize ⇒ NefParser
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) = "Not string data. Use File#read, not File#readlines." raise TypeError, 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 |