从用户的照片库中删除照片?

Jac*_*kin 10 iphone objective-c photolibrary uiimagepickercontroller

有没有办法可以删除从我的应用程序加载到我的应用程序的图像UIImagePickerController

我希望能够在用户执行特定操作时从用户的照片库中删除图像.

我提示用户从他们的库中选择一个图像,然后它被加载到我的应用程序中,此时应用程序会做一些时髦的动画,然后实际删除图像.

请帮忙!

Joh*_*ang 15

Apple实际上不允许您通过API从照片库中删除.用户必须实际转到照片应用并自行手动删除.Apple确实允许您写入照片库:

要将静止图像保存到用户的已保存照片相册,请使用UIImageWriteToSavedPhotosAlbum功能.要将电影保存到用户的已保存照片相册,请使用UISaveVideoAtPathToSavedPhotosAlbum功能.

但是,对于删除和编辑/覆盖现有照片,Apple现在没有类似的东西.


eva*_*hin 12

实际上,您可以删除应用程序保存的照片(使用UIImageWriteToSavedPhotosAlbum API调用保存到照片库).

记录的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);
}];
Run Code Online (Sandbox Code Playgroud)

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) {

}];
Run Code Online (Sandbox Code Playgroud)

5).转到默认图库,您会发现photo.jpg已被删除.


Abd*_*sin 2

是的,我们可以删除照片。我们可以用于PHAssetChangeRequest此操作。

来自苹果:

创建、删除、更改照片资产的元数据或编辑照片资产内容的请求,以在照片库更改块中使用。

class func deleteAssets(_ assets: NSFastEnumeration)
Run Code Online (Sandbox Code Playgroud)

其中asset:要删除的 PHAsset 对象的数组。

PHAssetChangeRequest.deleteAssets([assetToDelete])
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用上面的代码来删除资产。

下面是 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 )
        })
Run Code Online (Sandbox Code Playgroud)