iOS swift实现图片不重复保存至相册

本文介绍如何使用Swift在iOS应用中检查相册中是否已存在特定图片,并实现将新图片保存到相册的功能。文章详细展示了遍历相册图片、比较图片相似度的方法,并提供了保存图片到相册的具体实现。

获取到相册中的所有图片,分别与要保存的图片进行对比

(对比两张图片是否相同方法可查看swift 判断/比较两张图片是否相同).

    /// 相册中是否已存在图片
    ///
    /// - Returns: 是否存在图片的状态布尔值
    func isExistInPhotoAlbum() -> Bool {
        var imageIsEqual = false
        let allPhotosOptions = PHFetchOptions()
        allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)] //按创建日期排序
        let allPhotos = PHAsset.fetchAssets(with: allPhotosOptions) //获取所有照片

        //对所有照片进行遍历
        allPhotos.enumerateObjects({ (asset, index, stop) in
            let imageManager = PHImageManager.default()
            let options = PHImageRequestOptions()
            options.isSynchronous = true
            //将照片的元数据转换成UIImage对象
            imageManager.requestImage(for: asset, targetSize: CGSize(width: self.imageView.bounds.size.width, height: self.imageView.bounds.size.height), contentMode: .default, options: options, resultHandler: { (image, _: [AnyHashable : Any]?) in
                //对比两张图片是否相同
                let result = self.isEqualImage(imageOne: image!, imageTwo: self.imageView.image!)
                if result {
                    imageIsEqual = true
                    stop.pointee = true
                }
            })
        })
        return imageIsEqual
    }

保存图片至相册

    /// 保存图片
    func savePhoto() {
        let isEqual = self.isExistInPhotoAlbum()
        if isEqual {
            print("相册中已存在这张图片")
        } else {
            PHPhotoLibrary.shared().performChanges({
                let _ = PHAssetChangeRequest.creationRequestForAsset(from: self.imageView.image!)
            }) { (success, error) in
                if success {
                    print("save success")
                } else {
                    print("save fail")
                }
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值