iOS 把图片保存到相册,并获取图片文件名的实例

现在我来为您讲解一篇完整的攻略,如何在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技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 如何给虚拟机提速

    如何给虚拟机提速攻略 虚拟机的性能提升可以通过多种方式实现。下面是一些可以帮助您提升虚拟机性能的方法和示例说明。 1. 分配更多的资源 虚拟机的性能受到分配给它的资源的限制。通过增加虚拟机的资源分配,可以提高其性能。 示例说明: 增加内存分配:在虚拟机管理软件中增加虚拟机的内存分配。例如,将虚拟机的内存从2GB增加到4GB,可以提高虚拟机的运行速度和响应能力…

    other 2023年8月1日
    00
  • Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP

    Shell脚本获取本地网卡IP、mac地址、子网掩码、DNS IP、外网IP的攻略 在Shell脚本中,可以使用一些命令和工具来获取本地网卡IP、mac地址、子网掩码、DNS IP和外网IP。下面是一个完整的攻略,包含了两个示例说明。 步骤1:获取本地网卡信息 首先,我们需要获取本地网卡的信息,包括IP地址、mac地址和子网掩码。可以使用ifconfig命令…

    other 2023年7月31日
    00
  • C++设计模式之工厂模式

    接下来我将详细讲解C++设计模式之工厂模式的完整攻略。 工厂模式概述 工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们使用一个工厂方法来创建对象,而不是直接通过new来创建。这样有助于我们实现松耦合和高内聚。 工厂模式的核心思想是定义一个用来创建对象的接口,让子类决定具体要实例化对象的类。这样…

    other 2023年6月27日
    00
  • C语言实现斐波那契数列(非递归)的实例讲解

    C语言实现斐波那契数列(非递归)的实例讲解 什么是斐波那契数列 斐波那契数列是指这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列是以递归的方式定义:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2) (n>=2,n∈N*),用文字来说,就是斐波那契数列列由0和1开始,之后的斐波那契数就…

    other 2023年6月27日
    00
  • mkv2mp4formac(mkv转换mp4格式工具)

    以下是关于“mkv2mp4formac(mkv转换mp4格式工具)”的完整攻略,包括基本概念、使用方法和两个示例。 基本概念 mkv2mp4formac是一款Mac平台上的mkv转换mp4格式工具,可以将MKV格式的视频文件转换为MP4格式,以便在更多的设备上播放。它支持多种视频和音频编码格式,可以自定义输出视频和音频质量,还可以添加字幕和水印。 使用方法 …

    other 2023年5月7日
    00
  • bat 批量提取指定目录下的文件名

    下面是”bat 批量提取指定目录下的文件名”的完整攻略: 1. 确定要提取文件名的目录 首先需要明确的是,准备提取的文件名存储在哪个目录里。可以是本地目录、网络共享目录、云存储目录等。 2. 新建批处理文件 接下来需要新建一个批处理文件,后缀名为.bat。可以使用记事本等文本编辑器进行编写。下面给出一个简单的示例代码: @echo off setlocal …

    other 2023年6月26日
    00
  • Python实现的FTP通信客户端与服务器端功能示例

    Python实现的FTP通信客户端与服务器端功能示例攻略 本攻略将详细讲解Python实现的FTP通信客户端与服务器端功能的实现过程。我们将分为以下几个部分进行讲解:1. 环境搭建2. FTP客户端功能 – 下载文件示例3. FTP服务器端功能 – 上传文件示例4. 总结 环境搭建 在进行FTP客户端和服务器端功能实现之前,我们需要搭建Python开发环境。…

    other 2023年6月25日
    00
  • Win11新工具:轻轻松松帮你安装任何安卓 APK 应用

    来详细讲解一下“Win11新工具:轻轻松松帮你安装任何安卓 APK 应用”的完整攻略。 什么是“Win11新工具:轻轻松松帮你安装任何安卓 APK 应用”? 在Win11系统中,微软推出了一款名为 “安卓应用” 的新应用,可以帮助用户轻松地在Win11系统中安装并运行安卓 APK 应用程序。 如何使用“安卓应用”安装安卓 APK 应用? 接下来,我将提供“安…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部