1

私はobjective-Cを初めて使用し、Mac OSアプリでいくつかの画像のexifデータを取得しようとしています. exifデータを取得するにはCライブラリが必要なようですので、グーグルで検索していくつかのCライブラリを見つけましたが、それらを実装する方法に苦労しています。

1 DSLR カメラで撮影した画像の exif データを読み取るには、C ライブラリを取得する必要がありますか? (撮影日みたいなもの)

  1. 私はこのライブラリhttp://libexif.sourceforge.net/を試し、サイトを掘り下げて、ここからダウンロードしました: http://www.hmug.org/pub/MacOS_X/BSD/Libraries/Graphics/libexif/。このリンクに移動します: http://www.hmug.org/pub/MacOS_X/BSD/Libraries/Graphics/libexif/libexif-0.6.21-1-osx8.tar.gz

  2. これらのファイルを xcode にドラッグすると、ファイルがライブラリに正しく追加されているように見えます。ここに画像の説明を入力

  3. これらの C クラスをどのように使用すればよいかわかりません。このようなファイルを含めてみました

    #include "exif-data.h"

    #include "exif-loader.h"

これは正しいですか?私はそれを別の方法で行うべきですか?

  1. それから私は使い方について本当に混乱しています。ここのドキュメントページにhttp://libexif.sourceforge.net/api/と書かれています

libexif を使用するアプリケーションは通常、最初に ExifLoader を作成して、EXIF データをメモリにロードします。そこから、そのデータを ExifData として抽出し、操作を開始します。各 IFD は、ExifEntry 形式のすべてのタグ データを含む ExifData 内の独自の ExifContent によって表されます。MakerNote データが必要な場合は、ExifMnoteData を ExifData から抽出し、MakerNote 関数で操作できます。

「ExifLoader を作成する」ための構文は何ですか?

初心者の質問でごめんなさい!どんな助けでも大歓迎です。

4

2 に答える 2

8

Apple 独自の API を使用して、画像の Exif を取得できます。

ここに CGImageSource リファレンスCGimagePropertiesがあります

彼女は簡単な例です:

 NSURL *imageFileURL = [NSURL fileURLWithPath:@"/Users/USERNAME/Documents/tasting_menu_004.jpg"];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL);
NSDictionary *treeDict;
NSMutableString *exifData;


NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache,
                         nil];


CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, ( CFDictionaryRef)options);
CFRelease(imageSource);
if (imageProperties) {
    treeDict = [NSDictionary dictionaryWithDictionary:(NSDictionary*)(imageProperties)];
    id exifTree = [treeDict objectForKey:@"{Exif}"];



    exifData = [NSMutableString stringWithString:@""];



    for (NSString *key in [[exifTree allKeys] sortedArrayUsingSelector:@selector(compare:)])
    {


        NSString* locKey = [[NSBundle bundleWithIdentifier:@"com.apple.ImageIO.framework"] localizedStringForKey:key value:key table: @"CGImageSource"];

        id  value = [exifTree  valueForKey:key]  ;


                   [exifData appendFormat:@"key =%@ ; Value = %@ \n", locKey,value];




    }
 NSLog(@" exifData %@", exifData);

ログ -->exifData

キー = 絞り値 ; 値 = 4.643856

キー = 色空間 ; 値 = 65535

キー = カスタム レンダリング ; 値 = 0

キー = デジタル化された日時。値 = 2013:06:13 08:35:07

キー = 日時オリジナル ; 値 = 2013:06:13 08:35:07

キー = Exif バージョン ; 値 = ( 2, 2, 1 )

キー = 露出バイアス値 ; 値 = 0

キー = 露出モード ; 値 = 1

キー = 露出プログラム ; 値 = 1

キー = 露光時間 ; 値 = 0.0125

キー = F 番号 ; 値 = 5

キー = フラッシュ; 値 = 9

キー = 焦点距離 ; 値 = 17

key = 焦点面の解像度の単位 ; 値 = 2

キー = フォーカル プレーン X 解像度 ; 値 = 3849.211788896504

キー = 焦点面の Y 解像度 ; 値 = 3908.141962421712

key =ISO 速度定格 ; 値 = ( 800 )

キー = 最大絞り値 ; 値 = 4

キー = 測光モード ; 値 = 5

キー = ピクセル X ディメンション ; 値 = 5181

キー = ピクセルの Y 寸法 ; 値 = 3454

キー = シーン キャプチャ タイプ ; 値 = 0

キー = シャッター スピード値 ; 値 = 6.321928

キー = 対象距離 ; 値 = 1.22

キー = 1 秒未満の時間のデジタル化。値 = 25

キー = 1 秒未満の時間のオリジナル。値 = 25

キー = ホワイト バランス; 値 = 0

于 2013-08-18T16:51:48.677 に答える
0

この投稿はそれを行いました: http://devmacosx.blogspot.com/2011/07/nsimage-exif-metadata.html。これで、探しているすべての exif データを読み取ることができます。

于 2013-08-16T14:41:46.800 に答える