2012-05-14 29 views
7

Trong ứng dụng của tôi, tôi đang truy xuất UIImage từ thư viện nội dung, hình ảnh này có dữ liệu meta. Sau đó, ứng dụng sẽ thay đổi kích thước và xoay hình ảnh để tạo ra hình ảnh mới. Hình ảnh mới không có dữ liệu meta gốc được mong đợi nhưng làm cách nào để thêm dữ liệu meta vào hình ảnh trước khi tải lên?Dữ liệu meta UIImage

Cảm ơn trước!

Trả lời

14

Cố định bản thân mình, đây là phương pháp tôi đã sử dụng chỉ trong bất kỳ ai khác đang tự hỏi làm thế nào để làm điều đó! :)

-(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_ là gì? – bneupaane

+0

Một ALAsset của nó :) – shoughton123

+0

#import là cần thiết để lấy các hằng số – Anth0