Вопрос по iphone, ios, objective-c, xcode – UIImage метаданные

7

В моем приложении я получаю UIImage из библиотеки ресурсов, это изображение содержит метаданные. Затем приложение изменяет размеры и поворачивает изображение, что, в свою очередь, создает новое изображение. Новое изображение не содержит исходных метаданных, которые ожидаются, но как мне добавить метаданные обратно в изображение перед загрузкой?

Заранее спасибо!

Ваш Ответ

3   ответа
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;
}
#import & lt; ImageIO / ImageIO.h & gt; нужен, чтобы получить константы
что такое актив_?
Это ALAsset :) shoughton123
где вы создали ALAsset и как вы его используете? код вы также предоставляете код для этого?
Привет, ALAsset идет из средства выбора изображений ранее в приложении. Пожалуйста, ознакомьтесь с документацией Apple для использования средства выбора изображений и работы с ALAssets:developer.apple.com/library/ios/documentation/uikit/reference/… или посмотрите ELCImagePickerController:github.com/B-Sides/ELCImagePickerController, Я использовал свой собственный инструмент выбора изображений для предоставления расширенных функций, но для простого выбора библиотеки изображений подойдет любой из них. Спасибо Сэм shoughton123
3

что это укажет вам правильное направление.

Email jpg, созданный в приложении, включая метаданные

3
Это работает, только если я хочу сохранить изображение обратно в библиотеку ресурсов, мне нужно добавить его в сам UIImage для загрузки. Ура, хотя. shoughton123

Похожие вопросы