如何解决在Swift 5 XCode 11.6中无法将UIImage保存到相机胶卷
我正在尝试将生成的UIImage保存到Camera Roll。
我在Info.plist中有必要的隐私字符串。
我尝试了几种方法;
Error Domain=com.apple.accounts Code=7 "(null)
我尝试过的代码;
UIImageWritetoSavedPhotosAlbum(image!,nil,nil);
另一个是;
PHPhotoLibrary.shared().savePhoto(image: image!,albumName: "AlbumName",completion: { (asset) in
if asset != nil
{
print("error")
}
})
func savePhoto(image:UIImage,albumName:String,completion:((PHAsset?)->())? = nil) {
func save() {
if let album = PHPhotoLibrary.shared().findAlbum(albumName: albumName) {
PHPhotoLibrary.shared().saveImage(image: image,album: album,completion: completion)
} else {
PHPhotoLibrary.shared().createalbum(albumName: albumName,completion: { (collection) in
if let collection = collection {
PHPhotoLibrary.shared().saveImage(image: image,album: collection,completion: completion)
} else {
completion?(nil)
}
})
}
}
if PHPhotoLibrary.authorizationStatus() == .authorized {
save()
} else {
PHPhotoLibrary.requestAuthorization({ (status) in
if status == .authorized {
save()
}
})
}
}
// MARK: - Private
fileprivate func findAlbum(albumName: String) -> PHAssetCollection? {
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = nspredicate(format: "title = %@",albumName)
let fetchResult : PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album,subtype: .any,options: fetchOptions)
guard let photoAlbum = fetchResult.firstObject else {
return nil
}
return photoAlbum
}
fileprivate func createalbum(albumName: String,completion: @escaping (PHAssetCollection?)->()) {
var albumPlaceholder: PHObjectPlaceholder?
PHPhotoLibrary.shared().performChanges({
let createalbumRequest = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: albumName)
albumPlaceholder = createalbumRequest.placeholderForCreatedAssetCollection
},completionHandler: { success,error in
if success {
guard let placeholder = albumPlaceholder else {
completion(nil)
return
}
let fetchResult = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: [placeholder.localIdentifier],options: nil)
guard let album = fetchResult.firstObject else {
completion(nil)
return
}
completion(album)
} else {
completion(nil)
}
})
}
fileprivate func saveImage(image: UIImage,album: PHAssetCollection,completion:((PHAsset?)->())? = nil) {
var placeholder: PHObjectPlaceholder?
PHPhotoLibrary.shared().performChanges({
let createAssetRequest = PHAssetChangeRequest.creationRequestForAsset(from: image)
guard let albumChangeRequest = PHAssetCollectionChangeRequest(for: album),let photoPlaceholder = createAssetRequest.placeholderForCreatedAsset else { return }
placeholder = photoPlaceholder
let fastEnumeration = NSArray(array: [photoPlaceholder] as [PHObjectPlaceholder])
albumChangeRequest.addAssets(fastEnumeration)
},error in
guard let placeholder = placeholder else {
completion?(nil)
return
}
if success {
let assets:PHFetchResult<PHAsset> = PHAsset.fetchAssets(withLocalIdentifiers: [placeholder.localIdentifier],options: nil)
let asset:PHAsset? = assets.firstObject
completion?(asset)
} else {
completion?(nil)
}
})
}
您能帮我解决这个问题吗?
BR,
Erdem
解决方法
我知道了。
问题是我一直在创建使用CIFilter创建的QR图像为CIImage。
它返回错误代码= -1
您需要从CGImage而不是CIImage创建UIImage
constexpr
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。