2 つの画像解析機能を実行する画像処理アプリを作成しています。1 つは画像の RGB データを読み取る方法で、もう 1 つは EXIF データを読み取る方法です。フロントカメラで写真を撮り、ドキュメントフォルダーに保存しています。RGB 値を取得するには、次の方法で画像を読み込みます。
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.jpg"];
UIImage *image = [UIImage imageWithContentsOfFile:jpgPath];
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);
これは期待どおりに機能し、ピクセル データを取得できます。私の問題は、EXIF データの収集です。RGB と同じ方法で画像の読み取りを実装していますが、すべての EXIF データが NULL として返されます。
NSString *EXIFPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.jpg"];
NSURL *url = [NSURL fileURLWithPath:EXIFPath];
CGImageSourceRef sourceRef = CGImageSourceCreateWithURL((__bridge CFURLRef)url, NULL);
NSDictionary *immutableMetadata = (__bridge NSDictionary *) CGImageSourceCopyPropertiesAtIndex(sourceRef,0,NULL);
NSDictionary *exifDic = [immutableMetadata objectForKey:(NSString *)kCGImagePropertyExifDictionary];
NSNumber *ExifApertureValue = [exifDic objectForKey:(NSString*)kCGImagePropertyExifApertureValue];
NSNumber *ExifShutterSpeed = [exifDic objectForKey:(NSString*)kCGImagePropertyExifShutterSpeedValue];
NSLog(@"ExifApertureValue : %@ \n",ExifApertureValue);
NSLog(@"ExifShutterSpeed : %@ \n",ExifShutterSpeed);
次のように、コードの最初の行をアプリでプリロードされた画像を読み取るように変更すると:
NSString *aPath = [[NSBundle mainBundle] pathForResource:@"IMG_1406" ofType:@"JPG"];
できます。問題は、画像をプリロードできないことです。カメラからライブで撮影する必要があります。どんな提案でも大歓迎です。ありがとうございました。