在我的应用程序中,我需要从特定的 URL 链接下载图像并将其分配给UIImageView
. 我没有将该图像存储到我的库中,那么在这种情况下,如何在我的应用程序中获取该图像的 Exif 数据(如EXIF_TAG_CREATE_DATE
、EXIF_TAG_ARTIST
等)?
问问题
2207 次
2 回答
5
通过 ImageIO 访问图像属性,例如图像高度和宽度、DPI、EXIF 数据等
CFURLRef url = CFURLCreateFromFileSystemRepresentation (kCFAllocatorDefault, (const UInt8 *)inputFileName, strlen(inputFileName), false);
if (!url) {
printf ("* * Bad input file path\n");
}
CGImageSourceRef myImageSource;
myImageSource = CGImageSourceCreateWithURL(url, NULL);
CFDictionaryRef imagePropertiesDictionary;
imagePropertiesDictionary = CGImageSourceCopyPropertiesAtIndex(myImageSource,0, NULL);
CFNumberRef imageWidth = (CFNumberRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyPixelWidth);
CFNumberRef imageHeight = (CFNumberRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyPixelHeight);
int w = 0;
int h = 0;
CFNumberGetValue(imageWidth, kCFNumberIntType, &w);
CFNumberGetValue(imageHeight, kCFNumberIntType, &h);
CFRelease(imagePropertiesDictionary);
CFRelease(myImageSource);
printf("Image Width: %d\n",w);
printf("Image Height: %d\n",h);
(来源:http: //developer.apple.com/library/ios/#qa/qa1654/_index.html)
NSString *myPath = [[NSBundle mainBundle] pathForResource:@"IMG_2733" ofType:@"JPG"];
NSURL *myURL = [NSURL fileURLWithPath:myPath];
CGImageSourceRef mySourceRef = CGImageSourceCreateWithURL((CFURLRef)myURL, NULL);
NSDictionary *myMetadata = (NSDictionary *) CGImageSourceCopyPropertiesAtIndex(mySourceRef,0,NULL);
NSDictionary *exifDic = [myMetadata objectForKey:(NSString *)kCGImagePropertyExifDictionary];
NSDictionary *tiffDic = [myMetadata objectForKey:(NSString *)kCGImagePropertyTIFFDictionary];
NSLog(@"exifDic properties: %@", myMetadata); //all data
float rawShutterSpeed = [[exifDic objectForKey:(NSString *)kCGImagePropertyExifExposureTime] floatValue];
int decShutterSpeed = (1 / rawShutterSpeed);
NSLog(@"Camera %@",[tiffDic objectForKey:(NSString *)kCGImagePropertyTIFFModel]);
NSLog(@"Focal Length %@mm",[exifDic objectForKey:(NSString *)kCGImagePropertyExifFocalLength]);
NSLog(@"Shutter Speed %@", [NSString stringWithFormat:@"1/%d", decShutterSpeed]);
NSLog(@"Aperture f/%@",[exifDic objectForKey:(NSString *)kCGImagePropertyExifFNumber]);
NSNumber *ExifISOSpeed = [[exifDic objectForKey:(NSString*)kCGImagePropertyExifISOSpeedRatings] objectAtIndex:0];
NSLog(@"ISO %i",[ExifISOSpeed integerValue]);
NSLog(@"Taken %@",[exifDic objectForKey:(NSString*)kCGImagePropertyExifDateTimeDigitized]);
(来源:http ://blog.depicus.com/index.php/2011/05/07/getting-exif-data-from-images-on-ios/ )
通过开源(但已过时)的 iphone-exif 库访问 EXIF 属性
NSData* theImageData = UIImageRepresentation(anImage,1.0);
EXFJpeg* jpegScanner = [[EXFJpeg alloc] init];
[jpegScanner scanImageData: theImageData];
EXFMetaData* exifData = jpegScanner.exifMetaData; EXFJFIF* jfif =
jpegScanner.jfif;
id tagValue = [exifData tagValue: aTagId];
(来源:http ://code.google.com/p/iphone-exif/ )
于 2013-05-30T08:08:14.790 回答
0
try this
NSError *error = nil;
NSDictionary *attributes = [[NSFileManager defaultManager]
attributesOfItemAtPath:@"imagePath" error:&error];
if (!error)
{
NSLog(@"file attributes : %@",attributes);
}
and this is the result :
NSFileCreationDate = "2013-05-28 09:29:37 +0000";
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 20;
NSFileGroupOwnerAccountName = staff;
NSFileModificationDate = "2013-05-28 09:29:37 +0000";
NSFileOwnerAccountID = 502;
NSFileOwnerAccountName = lerhan;
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 1494;
NSFileSystemFileNumber = 46795419;
NSFileSystemNumber = 234881026;
NSFileType = NSFileTypeRegular;
to access any data type NSLog(@"file creation date : %@",[attributes objectForKey:@"NSFileCreationDate"]);
于 2013-05-30T08:03:31.533 回答