xcode UIImage元数据
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10582829/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
UIImage meta data
提问by shoughton123
In my app I am retrieving a UIImage from the asset library, this image has meta data. The app is then resizing and rotating the image which in turn is creating a new image. The new image does not have the original meta data which is expected but how do I add the meta data back to the image before upload?
在我的应用程序中,我从资产库中检索 UIImage,该图像具有元数据。该应用程序然后调整大小和旋转图像,从而创建一个新图像。新图像没有预期的原始元数据,但如何在上传前将元数据添加回图像?
Thanks in advance!
提前致谢!
回答by shoughton123
Fixed it myself, here is a method I used just incase anyone else is wondering how to do it! :)
自己修复了它,这是我使用的一种方法,以防其他人想知道该怎么做!:)
-(UIImage *)addMetaData:(UIImage *)image {
NSData *jpeg = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)];
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)jpeg, NULL);
NSDictionary *metadata = [[asset_ defaultRepresentation] metadata];
NSMutableDictionary *metadataAsMutable = [metadata mutableCopy];
NSMutableDictionary *EXIFDictionary = [metadataAsMutable objectForKey:(NSString *)kCGImagePropertyExifDictionary];
NSMutableDictionary *GPSDictionary = [metadataAsMutable objectForKey:(NSString *)kCGImagePropertyGPSDictionary];
NSMutableDictionary *TIFFDictionary = [metadataAsMutable objectForKey:(NSString *)kCGImagePropertyTIFFDictionary];
NSMutableDictionary *RAWDictionary = [metadataAsMutable objectForKey:(NSString *)kCGImagePropertyRawDictionary];
NSMutableDictionary *JPEGDictionary = [metadataAsMutable objectForKey:(NSString *)kCGImagePropertyJFIFDictionary];
NSMutableDictionary *GIFDictionary = [metadataAsMutable objectForKey:(NSString *)kCGImagePropertyGIFDictionary];
if(!EXIFDictionary) {
EXIFDictionary = [NSMutableDictionary dictionary];
}
if(!GPSDictionary) {
GPSDictionary = [NSMutableDictionary dictionary];
}
if (!TIFFDictionary) {
TIFFDictionary = [NSMutableDictionary dictionary];
}
if (!RAWDictionary) {
RAWDictionary = [NSMutableDictionary dictionary];
}
if (!JPEGDictionary) {
JPEGDictionary = [NSMutableDictionary dictionary];
}
if (!GIFDictionary) {
GIFDictionary = [NSMutableDictionary dictionary];
}
[metadataAsMutable setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary];
[metadataAsMutable setObject:GPSDictionary forKey:(NSString *)kCGImagePropertyGPSDictionary];
[metadataAsMutable setObject:TIFFDictionary forKey:(NSString *)kCGImagePropertyTIFFDictionary];
[metadataAsMutable setObject:RAWDictionary forKey:(NSString *)kCGImagePropertyRawDictionary];
[metadataAsMutable setObject:JPEGDictionary forKey:(NSString *)kCGImagePropertyJFIFDictionary];
[metadataAsMutable setObject:GIFDictionary forKey:(NSString *)kCGImagePropertyGIFDictionary];
CFStringRef UTI = CGImageSourceGetType(source);
NSMutableData *dest_data = [NSMutableData data];
CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)dest_data,UTI,1,NULL);
//CGImageDestinationRef hello;
CGImageDestinationAddImageFromSource(destination,source,0, (__bridge CFDictionaryRef) metadataAsMutable);
BOOL success = NO;
success = CGImageDestinationFinalize(destination);
if(!success) {
}
dataToUpload_ = dest_data;
CFRelease(destination);
CFRelease(source);
return image;
}