2012-05-14 13 views
7

W mojej aplikacji pobieram UIImage z biblioteki zasobów, ten obraz ma metadane. Aplikacja zmienia rozmiar i obraca obraz, który z kolei tworzy nowy obraz. Nowy obraz nie ma oryginalnych metadanych, które są oczekiwane, ale jak dodać metadane z powrotem do obrazu przed przesłaniem?UIImage meta dane

Z góry dzięki!

Odpowiedz

14

Naprawiono go samemu, oto metoda, którą użyłem, byle nikt nie zastanawiał się, jak to zrobić! :)

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

co to jest asset_? – bneupaane

+0

To jest zestaw ALA :) – shoughton123

+0

#import jest potrzebny do uzyskania stałych – Anth0