现在我来为您讲解一篇完整的攻略,如何在iOS中把图片保存到相册,并获取图片文件名。
步骤1:导入相册库
首先,我们需要导入Photos
框架来操作相册库。在你的ViewController
文件中添加如下导入语句:
import Photos
步骤2:保存图片到相册
接下来,我们需要使用PHPhotoLibrary
类来保存图片到相册。具体的操作步骤如下:
func saveImageToAlbum(image: UIImage) {
PHPhotoLibrary.shared().performChanges({
// 创建一个PHAssetCreationRequest对象
let request = PHAssetCreationRequest.creationRequestForAsset(from: image)
// 存储图片
let placeholder = request.placeholderForCreatedAsset
}, completionHandler: { (success, error) in
if success {
print("图片保存成功")
} else {
print("图片保存失败,错误信息: \(String(describing: error))")
}
})
}
以上代码中,我们首先创建了一个PHAssetCreationRequest
对象,该对象表示要保存到相册的图片,在performChanges
方法中,我们调用PHAssetCreationRequest
对象的creationRequestForAsset
方法将图片数据添加到图库中。
PHAssetCreationRequest
对象的placeholderForCreatedAsset
属性用来获取新添加的图片对象,并返回一个占位符用于展示没有图片的相簿中。
completionHandler
闭包会在操作完成后立即调用。如果操作成功,会将success
设置为true
,否则会将success
设置为false
并返回一个错误信息。在saveImageToAlbum
方法中,我们会根据success
的值来输出不同的日志信息。
步骤3:获取图片文件名
最后,我们需要获取刚才保存的图片文件名,在iOS平台上,保存到相册的图片是使用系统生成的UUID作为文件名保存在相册中的,我们可以根据这个UUID来获取图片的文件名。具体的步骤如下:
func getFileNameForImage(_ imageAsset: PHAsset, completion: @escaping (String) -> Void) {
let resources = PHAssetResource.assetResources(for: imageAsset)
var fileName = ""
if let resource = resources.first {
let originalFileName = resource.originalFilename
let assetID = imageAsset.localIdentifier.replacingOccurrences(of: "/", with: "")
fileName = "\(assetID)_\(originalFileName)"
}
completion(fileName)
}
以上代码中,我们首先获取PHAssetResource
对象,该对象封装了与资源相关的元数据信息,我们可以使用assetResources
方法获取资源列表。
然后,我们遍历资源列表,以获取文件名。假设获取到的第一个资源表示图片文件,那么我们可以使用该资源的originalFilename
属性来获取文件名。由于该文件名可能包含非法字符,因此我们需要针对文件名中的“/”字符进行替换,以确保文件名的合法性。最后将assetID和文件名结合在一起,作为保存在相册中的图片的文件名。
最后,我们在getFileNameForImage
方法中,使用completion
回调把获取到的文件名作为参数传递出去。
示例1: 保存一张图片,获取图片文件名
let image = UIImage(named: "image.png")!
saveImageToAlbum(image: image)
// 获取最新一张图片的文件名
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
if let imageAsset = fetchResult.firstObject {
getFileNameForImage(imageAsset, completion: { (fileName) in
print("获取到的图片文件名为: \(fileName)")
})
}
以上代码中,我们首先保存一张名为image.png
的图片到相册中,然后获取最新保存的图片,并调用getFileNameForImage
方法来获取文件名。
示例2: 删除指定UUID的图片
func deleteImageFromAlbum(_ fileName: String) {
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "mediaType == %d AND filename == %@", PHAssetMediaType.image.rawValue, fileName)
let fetchResult = PHAsset.fetchAssets(with: fetchOptions)
if let asset = fetchResult.firstObject {
PHPhotoLibrary.shared().performChanges({
// 删除指定的图片
PHAssetChangeRequest.deleteAssets([asset] as NSArray)
}, completionHandler: { (success, error) in
if success {
print("图片删除成功")
} else {
print("图片删除失败,错误信息: \(String(describing: error))")
}
})
} else {
print("找不到指定的文件")
}
}
以上代码中,我们首先根据文件名获取到指定的图片资源,然后使用performChanges
方法删除该资源。
如果删除成功,将会调用completionHandler
闭包并输出日志信息,否则输出对应的失败信息。
好了,以上就是保存图片到相册、获取图片文件名以及删除图片的全过程了,希望能对您有所帮助。如果您还有任何问题或需要进一步的解释,请随时告诉我。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iOS 把图片保存到相册,并获取图片文件名的实例 - Python技术站