繁体   English   中英

如何保存然后检索相册中具有特定名称的图像?

[英]How to save then retrieve image with specific name in Photo album?

我尝试了以下方法,但是不会保存具有给定名称的图像。

首次尝试 :成功,但未使用给定名称保存

var paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var dir = paths[0] as! String
var filePath = "\\(dir)/imageName.jpg"
var saveImage = UIImage(contentsOfFile: filePath)
UIImageWriteToSavedPhotosAlbum(saveImage, self, nil, nil)

第二次尝试 :无法保存图像

var data = UIImageJPEGRepresentation(image, 1.0)
data.writeToFile(filePath, true)


最后,我将图像保存到具有特定名称的NSSearchPathDirectory.DocumentDirectory中。 即使不可见,我们也可以搜索具有特定名称的文件并在UIImageView中打开/显示。

据我所知,iPhone不允许您以编程方式将名称Image写入或搜索到Photo gallery。 如果可以的话,请告诉我如何。

在您使用此工具之前,我建议您仔细阅读iOS的photos框架

为此创建一个单例类-

class CreateCustomPhotoAlbum: NSObject
    {
        static let albumName = "Your album name"
        static let sharedInstance = createCustomPhotoAlbum()

        var assetCollection: PHAssetCollection!

        override init() {
            super.init()

            if let assetCollection = fetchAssetCollectionForAlbum()
            {
                self.assetCollection = assetCollection
                return
            }

            if PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.Authorized
            {
                PHPhotoLibrary.requestAuthorization({ (status: PHAuthorizationStatus) -> Void in
                    status
                })
            }

            if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.Authorized {
                self.createAlbum()
            } else {
                PHPhotoLibrary.requestAuthorization(requestAuthorizationHandler)
            }
        }

        func requestAuthorizationHandler(status: PHAuthorizationStatus)
        {
            if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.Authorized {
                // ideally this ensures the creation of the photo album even if authorization wasn't prompted till after init was done
                print("trying again to create the album")
                self.createAlbum()
            } else {
                print("should really prompt the user to let them know it's failed")
            }
        }

        func createAlbum() {
            PHPhotoLibrary.sharedPhotoLibrary().performChanges({
                PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(createCustomPhotoAlbum.albumName)   // create an asset collection with the album name
                }) { success, error in
                    if success {
                        self.assetCollection = self.fetchAssetCollectionForAlbum()
                    } else {
                        print("error \(error)")
                    }
            }
        }

        func fetchAssetCollectionForAlbum() -> PHAssetCollection!
        {
            let fetchOptions = PHFetchOptions()
            fetchOptions.predicate = NSPredicate(format: "title = %@", createCustomPhotoAlbum.albumName)
            let collection = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)

            if let _: AnyObject = collection.firstObject {
                return collection.firstObject as! PHAssetCollection
            }
            return nil
        }

        func saveImage(image: UIImage)
        {
            if assetCollection == nil
            {
                return                          // if there was an error upstream, skip the save
            }

            PHPhotoLibrary.sharedPhotoLibrary().performChanges({
                let assetChangeRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
                let assetPlaceHolder = assetChangeRequest.placeholderForCreatedAsset
                let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection)
                albumChangeRequest!.addAssets([assetPlaceHolder!])
                }, completionHandler: nil)
        }

    }

保存图片

只需简单地称呼它-

createCustomPhotoAlbum.sharedInstance.saveImage(imageName!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM