画像ファイルのinfoデータを取得する方法について調べていたらExifデータを取得するExiv2というライブラリを見つけたので試してみました。
Homebrewからインストールも可能ですが、今回は公式サイトからtar.gzファイルをDLしました。
最初はエラー出力から自力でフラグを探っていきましたが結局うまくいかず、CPPFLAGSやLDFLAGSをコマンドで取得しMakefileを作成しました。
公式サイトにあるexifprint.cppというソースコードでテストし、Exif全データを出力させることができました。
なおPCで作成した画像ファイルのinfoデータはこのライブラリでは読み取れません。あくまで写真のメタデータ取得用です。
# コンパイラ設定他
COMPILER = clang++
DEBUG = -g
# フラグ設定
CPPFLAGS = $(shell pkg-config exiv2 --cflags )
LDFLAGS = $(shell pkg-config exiv2 --libs )
# includeパス設定
INCLUDE =
# linkパス設定
LINK =
# ライブラリパス設定
LIBRARY =
# 実行ファイル設定
TARGET = exifprint
TARGETDIR = ../bin
# ソースコードパス
SRCROOT = .
# oファイルの出力ディレクトリ
OBJROOT = ../obj
# ソースディレクトリ
SRCDIR = ../src
# オブジェクトファイル
OBJECT = $(OBJROOT)/$(TARGET).o
# cppファイルからoファイル作成
$(OBJROOT)/%.o: $(SRCROOT)/%.cpp
$(COMPILER) $(CPPFLAGS) $(INCLUDE) $(DEBUG) -o $@ -c $<
# oファイルから実行ファイル作成
$(TARGET): $(OBJECT)
$(COMPILER) -o $(TARGETDIR)/$@ $(OBJECT) $(LINK) $(LDFLAGS) $(LIBRARY)
# コンパイル&ビルド
all: clean $(TARGET)
# ファイル削除
clean:
rm -rf $(OBJECT) $(TARGETDIR)/$(TARGET)
作成した実行ファイルでExif全データを出力するコマンド
exifprint [画像ファイルパス]
Exif.Image.Make 0x010f Ascii 18 NIKON CORPORATION
Exif.Image.Model 0x0110 Ascii 11 NIKON D500
Exif.Image.Orientation 0x0112 Short 1 1
Exif.Image.XResolution 0x011a Rational 1 300/1
Exif.Image.YResolution 0x011b Rational 1 300/1
Exif.Image.ResolutionUnit 0x0128 Short 1 2
Exif.Image.Software 0x0131 Ascii 10 Ver.1.20