我们如何知道相册中是否已存在图像?

时间:2019-12-11 12:32:28

标签: ios swift phasset phassetcollection

我以编程方式创建了一个相册。我想在添加新图像之前检查图像是否已经存在于相册中。 您可以使用以下代码进行检查 CustomAlbum.shared.saveImage(image:UIImage()) 这样保存图片。

import Foundation
import Photos
class CustomAlbum {
    static let albumName = "xyz"
    static let shared = CustomAlbum()
    var assetCollection: PHAssetCollection!
    init() {
        func fetchAssetCollectionForAlbum() -> PHAssetCollection! {
            let fetchOptions = PHFetchOptions()
            fetchOptions.predicate = NSPredicate(format: "title = %@", CustomAlbum.albumName)
            let collection = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
            if let _: AnyObject = collection.firstObject {
                return collection.firstObject!
            }
            return nil
        }
        if let assetCollection = fetchAssetCollectionForAlbum() {
            self.assetCollection = assetCollection
            return
        }
        PHPhotoLibrary.shared().performChanges({
            PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: CustomAlbum.albumName)
        }) { _, _ in
            self.assetCollection = fetchAssetCollectionForAlbum()
        }
    }

    func saveImage(image: UIImage) {
        if assetCollection == nil { return }
        PHPhotoLibrary.shared().performChanges({
            let assetPlaceholder = PHAssetChangeRequest.creationRequestForAsset(from: image).placeholderForCreatedAsset
            let albumChangeRequest = PHAssetCollectionChangeRequest(for: self.assetCollection)
            let assetEnumeration: NSArray = [assetPlaceholder!]
            albumChangeRequest?.addAssets(assetEnumeration)
        }, completionHandler: nil)
    }
    func allPhotos(albumName: String = "xyz", albumImages: @escaping ([UIImage]) -> Void) {
        let group = DispatchGroup()
        var images: [Image] = []
        let fetchOptions = PHFetchOptions()
        fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)

        let resultCollections = PHAssetCollection.fetchAssetCollections(
            with: .album,
            subtype: .albumRegular,
            options: fetchOptions)

        resultCollections.enumerateObjects({
            (object, index, stop) -> Void in
            let collection = object
            let result = PHAsset.fetchAssets(in: collection, options: nil)
            result.enumerateObjects({
                (object, index, stop) -> Void in
                group.enter()
                images.append(object.getfullImage())
                group.leave()
            })
        })
        group.notify(queue: DispatchQueue.main) {
            albumImages(images)
        }
    }
}

使用此代码,我将获取相册的所有图像,并与要保存的图像进行比较。

    PHPhotoLibrary.shared().allPhotos { (images) in 
    let image = UIImage()

}

1 个答案:

答案 0 :(得分:0)

 class func getPhotofolder() -> String{
    let fileManager = FileManager.default
    let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("hsafetyPhoto") //hsafetyPhoto is my folder name to store the image  and if doesnt exist then system will create one 
    if !fileManager.fileExists(atPath: paths){
        try! fileManager.createDirectory(atPath: paths, withIntermediateDirectories: true, attributes: nil)

    }else{
        print("Already dictionary created.")
    }

    return  paths
}


//Save Image At hsafetyPhoto Document Directory
class func saveImageDocumentDirectory(photo : UIImage, photoUrl : String) -> Bool{

    let fileManager = FileManager.default

    let paths =  Utility.getPhotofolder().stringByAppendingPathComponent(pathComponent: photoUrl)
    print("image's path \(paths)")
    if !fileManager.fileExists(atPath: paths){

        let imageData = UIImageJPEGRepresentation(photo, 0.5)
        fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil)

        if !fileManager.fileExists(atPath: paths){
            return false
        }else{
            return true
        }

    }else{
        print(paths)
        let imageData = UIImageJPEGRepresentation(photo, 0.5)
        fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil)
        if !fileManager.fileExists(atPath: paths){
            return false
        }else{
            return true
        }

    }


}
相关问题