iOS-实现图片的IPTC信息提取
//判断字典是否为空
#define NULLDic(dic) ((dic == nil)||[dic isKindOfClass:[NSNull class]]||dic == 0)
///获取图片IPTC信息
+ (NSDictionary *)getImageDescriptionStrFromData:(NSData *)imageData {
CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)imageData, NULL);
CFDictionaryRef imageInfo = CGImageSourceCopyPropertiesAtIndex(imageSource, 0,NULL);
//图片标题
NSString *titleStr = @"";
//图片描述
NSString *contentStr = @"";
//图片拍摄时间
NSString *shootTimeStr = @"";
//tiff
CFDictionaryRef tiffRef = CFDictionaryGetValue(imageInfo, kCGImagePropertyTIFFDictionary);
NSDictionary *tiffRefDic = (__bridge NSDictionary *)tiffRef;
if (!NULLDic(tiffRefDic)) {
CFStringRef tiffStringRef = CFDictionaryGetValue(tiffRef , kCGImagePropertyTIFFImageDescription);
NSString *tiffStr = (__bridge NSString *)tiffStringRef;
if ([tiffStr containsString:@" "]) {
NSRange blankRange = [tiffStr rangeOfString:@" "];
titleStr = [tiffStr substringToIndex:blankRange.location];
contentStr = [tiffStr substringFromIndex:blankRange.location + blankRange.length];
} else {
contentStr = tiffStr;
}
}
//拍摄时间
CFDictionaryRef exifRef = CFDictionaryGetValue(imageInfo, kCGImagePropertyExifDictionary);
NSDictionary *exifRefDic = (__bridge NSDictionary *)exifRef;
if (!NULLDic(exifRefDic)) {
CFStringRef exifStringRef = CFDictionaryGetValue(exifRef , kCGImagePropertyExifDateTimeOriginal);
shootTimeStr = (__bridge NSString *)exifStringRef;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy:MM:dd HH:mm:ss"];
NSDate *timeDate = [dateFormatter dateFromString:shootTimeStr];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
shootTimeStr = [dateFormatter stringFromDate:timeDate];
}
NSDictionary *iptcDic = @{@"title":titleStr?:@"",
@"content":contentStr?:@"",
@"shootTime":shootTimeStr?:@"",
};
return iptcDic;
}