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

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

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

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

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

3 ответов


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

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

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


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

документированный API [ALAsset setImageData:metadata:completionBlock:] строительство.

1). Добавить изображение "фото.в 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). Перейдите в галерею по умолчанию, вы найдете фотографию.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). Перейдите в галерею по умолчанию, вы найдете фотографию.jpg уже удален.


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

От Apple:

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

class func deleteAssets(_ assets: NSFastEnumeration)

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

PHAssetChangeRequest.deleteAssets([assetToDelete])

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

ниже swift 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 )
        })