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

yizhihongxing

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

相关文章

  • 苹果iOS9与iOS8哪个好?iOS9与iOS8界面详细对比评测

    苹果iOS9与iOS8对比评测攻略 1. 界面设计 iOS 9界面设计 iOS 9引入了一些新的界面设计元素,使用户体验更加流畅和直观。以下是iOS 9界面设计的一些亮点: 新的通知中心:iOS 9的通知中心进行了重新设计,增加了更多的小部件和快捷操作,使用户能够更方便地查看和处理通知。 改进的多任务处理:iOS 9引入了分屏多任务处理功能,允许用户同时在两…

    other 2023年8月18日
    00
  • Win10记事本怎么改后缀?Win10记事本修改拓展名方法

    Win10记事本怎么改后缀?Win10记事本修改拓展名方法攻略 在Windows 10中,记事本是一个常用的文本编辑工具。有时候,我们可能需要修改文件的后缀名,以便与其他程序兼容或者更改文件类型。下面是详细的攻略,教你如何在Win10记事本中改变文件的后缀名。 步骤一:显示文件扩展名 在开始修改文件后缀名之前,我们需要确保Windows 10显示文件扩展名。…

    other 2023年8月5日
    00
  • Linux系统的垃圾清理方法总结

    Linux系统的垃圾清理方法总结 什么是垃圾清理? 垃圾清理是指在Linux系统上清除没有用处或者不必要的文件和目录的操作,通过垃圾清理操作能够释放存储空间并提供系统的整体性能。 垃圾清理方法 1. apt-get autoclean 使用 apt-get autoclean 命令可以清理废弃的包文件(不包括当前安装软件所依赖的文件)。 sudo apt-g…

    other 2023年6月27日
    00
  • mariadb启动方法

    Mariadb启动方法 一、前言 本篇文章主要介绍Mariadb启动方法,内容适用于所有使用Mariadb的用户,帮助用户正确、快速的启动Mariadb。 二、启动方法 启动Mariadb需要通过终端或命令行执行相关命令,具体步骤如下: 打开终端或命令行。 输入以下命令以启动Mariadb服务: sudo systemctl start mariadb.se…

    其他 2023年3月28日
    00
  • java生成随机字符串方法(三种)

    以下是关于Java生成随机字符串方法的完整攻略,包括三种生成随机字符串的方法和两个示例说明。 方法一:使用Random类生成随机字符串 使用Java的Random类可以生成随机字符串。以下是使用Random类生成随机字符串的步骤: 创建一个Random对象; 定义一个字符串变量,用于存储生成的随机字符串; 使用Random对象生成随机数,并将其转换为字符; …

    other 2023年5月7日
    00
  • Java中的接口多继承机制

    Java中的接口多继承机制,是指一个接口可以同时继承多个父接口的方法定义。这可以使得接口更加灵活和可扩展,使得我们可以更好地进行代码设计和重用。撰写完整攻略的过程中,我将包含以下内容: 什么是Java中的接口多继承机制? 接口多继承的语法和使用方法 示例说明 示例一:解释接口继承多个其他接口的用法和适用场景。 示例二:展示如何在实现类中实现多个继承的接口。 …

    other 2023年6月27日
    00
  • android studio集成ijkplayer的示例代码

    接下来我将详细讲解如何在Android Studio集成IjkPlayer以及示例代码,包括以下步骤: 1. 添加IjkPlayer库依赖 首先,在项目的 build.gradle 文件中添加 maven { url ‘https://jitpack.io’ } 到 repositories 中,然后加入以下引用: implementation ‘com.g…

    other 2023年6月27日
    00
  • steam饥荒

    Steam饥荒:最受欢迎的生存游戏之一 饥荒(Don’t Starve)是一款由加拿大独立游戏开发商Klei Entertainment制作的生存游戏,于2013年首次推出。游戏以随机生成的地图作为背景,玩家需要在荒野中收集资源,建造设施,狩猎生物和驱逐威胁,以保护自己免于饥饿和野兽的威胁。 2016年,Klei Entertainment与Tencent …

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部