2012-05-14 18 views
7

在我的應用程序中,我從資產庫中檢索UIImage,此圖像具有元數據。該應用程序然後調整大小和旋轉圖像,從而創建一個新的圖像。新圖像沒有預期的原始元數據,但如何在上載前將元數據添加回圖像?UIImage元數據

在此先感謝!

回答

14

修正它我自己,這裏是一種方法,我只是在任何人都想知道如何做到這一點! :)

-(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; 
} 
+0

什麼是asset_? – bneupaane

+0

它是一個ALAsset :) – shoughton123

+0

需要#import 來獲取常量 – Anth0