Удалить фотографию из библиотеки фотографий пользователя?

Есть ли способ удалить изображение, загруженное в мое приложение, с помощью UIImagePickerController?

Я хочу, чтобы убрать изображение из библиотеки фотографий пользователя, когда пользователь выполняет определенное действие.

Я предлагаю пользователю выбрать образ из своей библиотеки, затем он загружается в мое приложение, после чего приложение выполняет некоторую shnazzy-анимацию, а затем фактически удаляет изображение.

Пожалуйста, помогите!

Ответ 1

Apple фактически не позволяет вам удалять из библиотеки фотографий через API. Пользователь должен фактически перейти в приложение "Фото" и самостоятельно удалить его вручную. Apple позволяет вам писать в библиотеку фотографий:

Чтобы сохранить неподвижное изображение для пользователей Альбом сохраненных фотографий, используйте UIImageWriteToSavedPhotosAlbum функция. Чтобы сохранить фильм в альбомов сохраненных фотографий, используйте UISaveVideoAtPathToSavedPhotosAlbum функция.

Но для удаления и редактирования/переопределения существующей фотографии Apple сейчас не имеет ничего подобного.

Ответ 2

На самом деле вы можете удалить фотографии, сохраненные в приложении (сохраненные в библиотеке фотографий с помощью вызова API UIImageWriteToSavedPhotosAlbum).

Документированный API [ALAsset setImageData:metadata:completionBlock:] работает.

1). Добавить изображение "photo.jpg" в свой проект

2). Сохраните изображение в библиотеке ресурсов:

ALAssetsLibrary *lib = [ALAssetsLibrary new];
UIImage *image = [UIImage imageNamed:@"photo.jpg"];
[lib writeImageToSavedPhotosAlbum:image.CGImage metadata:@{} completionBlock:^(NSURL *assetURL, NSError *error) {
    NSLog(@"Write image %@ to asset library. (Error %@)", assetURL, error);
}];

3). Перейдите в галерею по умолчанию, вы найдете photo.jpg в своем альбоме "Сохраненные фотографии".

4). Удалить это изображение из библиотеки ресурсов:

ALAssetsLibrary *lib = [ALAssetsLibrary new];
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
    [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) {
        if(asset.isEditable) {
            [asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
                NSLog(@"Asset url %@ should be deleted. (Error %@)", assetURL, error);
            }];
        }
    }];
} failureBlock:^(NSError *error) {

}];

5). Перейдите в галерею по умолчанию, вы увидите, что photo.jpg уже удален.

Ответ 3

Да, мы можем удалить фотографию. Мы можем использовать PHAssetChangeRequest для этой операции.

От Apple:

Запрос на создание, удаление, изменение метаданных для или изменение содержимого объекта "Фотографии" для использования в блоке изменения фотокаталогов.

class func deleteAssets(_ assets: NSFastEnumeration)

где активы: Массив объектов PHAsset для удаления.

PHAssetChangeRequest.deleteAssets([assetToDelete])

Таким образом, вы можете использовать приведенный выше код для удаления активов.

ниже - это быстрый код 3,

PHPhotoLibrary.shared().performChanges({
            let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: imageUrls as! [URL], options: nil)
            PHAssetChangeRequest.deleteAssets(imageAssetToDelete)
        }, completionHandler: {success, error in
            print(success ? "Success" : error )
        })