Сохранение фотографии с метаданными в Camera Roll с определенным именем файла

Я пытаюсь сохранить изображение с метаданными exif, используя следующий код:

+(void)saveImageWithMetaToCameraRoll:(UIImage*)image location:(CLLocation*)location album:(PHAssetCollection *)album exif:(NSDictionary *)metadata isOriginal:(BOOL)isOriginal isFavorite:(BOOL)isFavorite completionBlock:(PHAssetBoolBlock)completionBlock {

NSMutableDictionary *meta = [metadata mutableCopy];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0f);
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef) imageData, NULL);

if (!isOriginal) {
    [meta resetOrientation];
}

NSString *timestamp = [NSString stringWithFormat:@"%.0f", [[NSDate date] timeIntervalSince1970] * 1000];
NSString *fileName = [NSString stringWithFormat:@"IMG_%@_%@.jpeg", timestamp, isOriginal ? @"orig" : @"d"];

[meta setTitle:fileName];

NSURL *tmpURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:fileName]];

CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef) tmpURL, kUTTypeJPEG, 1, NULL);
CGImageDestinationAddImageFromSource(destination, source, 0, (__bridge CFDictionaryRef) meta);

CGImageDestinationFinalize(destination);
CFRelease(source);
CFRelease(destination);

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    PHAssetChangeRequest *newAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:tmpURL];

    PHObjectPlaceholder *placeholderAsset = newAssetRequest.placeholderForCreatedAsset;


    if (album) {
        PHAssetCollectionChangeRequest *changeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:album];

        [changeRequest addAssets:@[placeholderAsset]];
    }

} completionHandler:^(BOOL success, NSError *error) {
    //Clean up the file:
    [[NSFileManager defaultManager] removeItemAtURL:tmpURL error:nil];

    if (error) {
        NSLog(@"%@", error);
    }

    completionBlock(success);
}];
}

Заметил, что некоторые приложения (Snapseed, Photoshop и другие) могут устанавливать произвольное имя файла при экспорте изображения в Camera Roll. И я не могу понять, как именно они это делают. Любая идея?

PS: я уже пробовал этот способ, и он не работает на iOS 10.3.1

0 ответов

Другие вопросы по тегам