libexif使ってみた

カメラを縦にして撮ると、PCでみた時大抵のビュワーだと写真が横になるので、フォルダごとドラッグアンドドロップしたら中にあるjpgファイル手当たり次第に調べて回転してる写真は正しい向きになるように修正するツールがあると便利だなと思ってちょっと調べてみた。
回転情報はExifに記録されてるようなので、Exifで回転情報を調べて必要ならImageMagickで回せばいいやとなり、Exif操作ライブラリのlibexifを導入。
[cpp]
/**
* main.cpp
* exifのorientation情報取得
* @date 2014/01/02
* @author まっちゃん
*/
#include <libexif/exif-data.h>
#include <iostream>
int main(int argc, char *argv[]){
if(argc < 2){
return 0;
}
//Exif読み込み
ExifData *exifData = exif_data_new_from_file(argv[1]);
if(exifData == nullptr){
return 0;
}
//オリエンテーション情報取得
ExifEntry *entry = exif_content_get_entry(exifData->ifd[EXIF_IFD_0], EXIF_TAG_ORIENTATION);
int orientation = 0;
if(entry != nullptr){
std::cout << exif_get_short(entry->data, exif_data_get_byte_order (entry->parent->parent)) << std::endl;
}
exif_data_unref(exifData);
return 0;
}
[/cpp]
exif_data_new_from_fileに読み込むjpegファイルのパスを渡してExifData構造体のポインタを取得。
exif_content_get_entryでIFD0に入ってるORIENTATIONデータを取得。これが回転情報。
サンプルを見るとexif_entry_get_valueで取得するように見えるけど、これで取ってくると「左上」とか扱いに困るものが帰ってくるので、exif_get_short(entry->data, exif_data_get_byte_order (entry->parent->parent))で回転情報を取得。
最後にexif_data_unrefでexifデータを解放して終了。
で、ここまで調べて書いたところで、ImageMagickでその辺処理できることが判明してちょっと凹む。
libexifはなんか違うときに使おう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です