2012-05-14 12 views
7

In meiner App erhalte ich ein UIImage aus der Asset-Bibliothek, dieses Bild hat Metadaten. Die App skaliert und dreht dann das Bild, wodurch wiederum ein neues Bild erstellt wird. Das neue Bild enthält nicht die ursprünglichen Metadaten, die erwartet werden, aber wie füge ich die Metadaten vor dem Hochladen wieder dem Bild hinzu?UImage Metadaten

Vielen Dank im Voraus!

Antwort

14

Ich habe es selbst repariert, hier ist eine Methode, die ich nur verwendet, wenn jemand anders sich fragt, wie es geht! :)

-(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

Was ist Asset_? – bneupaane

+0

Es ist ein ALAsset :) – shoughton123

+0

#import ist erforderlich, um die Konstanten – Anth0