【iOS】遍历相册照片

news/2024/7/20 6:12:52 标签: ios

photos框架

Photos 框架是苹果公司提供的一个用于访问和管理 iOS 和 macOS 上的照片和视频的框架。它提供了一套 API,可以让开发者在应用程序中访问用户的照片和视频,并对它们进行处理和编辑。

Photos 框架的主要功能包括:

  • 访问照片和视频:开发者可以使用 Photos 框架来访问用户设备上的照片和视频。
  • 管理相册:开发者可以使用 Photos 框架来创建、修改和删除用户的相册。
  • 编辑照片和视频:开发者可以使用 Photos 框架来编辑照片和视频,包- 括调整色彩、亮度、对比度等参数,以及添加滤镜、裁剪、旋转等操作。
  • 查询和过滤照片和视频:开发者可以使用 Photos 框架来查询和过滤照片和视频,以便根据不同的条件来检索用户的媒体资料。

使用 Photos 框架的优点是,它提供了一套非常简单易用的 API,可以让开发者很容易地访问和处理用户的照片和视频。同时,Photos 框架也支持对媒体资料进行高效的存储和管理,可以保证应用程序在处理大量媒体资料时的性能和稳定性。

操作步骤

1. 导入Photos框架

#import <Photos/Photos.h>

2. 在info添加Privacy - Photo Library Usage Description键。

  1. 打开info文件。
  2. 添加空白行,在空白行输入Privacy - Photo Library Usage Description。
    在这里插入图片描述

3. 使用PHPhotoLibrary确认用户授权

    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
        switch (status) {
            case PHAuthorizationStatusAuthorized:
                // 用户已授权,可以访问相册或照片库数据
                // 在此添加相关操作代码
                self.assets = [self getAllAssetInPhotoAblumWithAscending:YES];
                self.imageArray = [self analysisAssets:self.assets];
                break;
            case PHAuthorizationStatusDenied:
            case PHAuthorizationStatusRestricted:
                // 用户已拒绝或受限制,无法访问相册或照片库数据
                // 在此添加相关操作代码
                break;
            case PHAuthorizationStatusNotDetermined:
                // 用户尚未做出选择,可以继续请求授权
                // 在此添加相关操作代码
                break;
            default:
                break;
        }
    }];

4. 获取相册内所有内容

PHAsset类

PHAsset 是 Photos 框架中表示用户照片或视频的对象。它代表了用户在设备上的照片和视频资源,包括图片和 Live Photo、视频、GIF 图片等。

PHFetchOptions类

PHFetchOptions 是 Photos 框架中用来配置和控制数据查询的选项类。它可以用来设置查询的排序方式、过滤条件、分页信息等。

PHFetchOptions 提供了多种配置选项,例如:

sortDescriptors: 用来设置查询结果的排序方式,可以按照创建日期、修改日期、文件名等进行排序。
predicate: 用来设置查询结果的过滤条件,可以根据媒体类型、创建日期、修改日期、位置信息等进行过滤。
includeHiddenAssets: 用来控制是否包含隐藏的媒体资源。
includeAllBurstAssets: 用来控制是否包含连拍照片中的所有资源。
includeAssetSourceTypes: 用来控制查询的媒体资源类型,例如相册、iCloud 等。
fetchLimit: 用来设置查询结果的最大数量。
fetchOffset: 用来设置查询结果的起始位置。

操作

	NSMutableArray<PHAsset*>* assets = [[NSMutableArray alloc] init];
    
    PHFetchOptions* option = [[PHFetchOptions alloc] init];
    
    // 设置查询结果按照片创建时间排序
    // ascending为YES升序排序,NO降序排序
    option.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:ascending]];
    
    // result为查询结果 
    // type 指定要获取的媒体类型,可选值为
		/*PHAssetMediaTypeImage: 表示要获取图片资源。
		PHAssetMediaTypeVideo: 表示要获取视频资源。
		PHAssetMediaTypeAudio: 表示要获取音频资源。
		PHAssetMediaTypeUnknown: 表示要获取未知类型的资源。*/
    PHFetchResult* result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:option];
    
    // 结果
    [result  enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        PHAsset* asset = (PHAsset*)obj;

        [assets addObject:asset];
    }];
    
    return assets;

5. 解析数据

PHImageRequestOptions

PHImageRequestOptions 是 Photos 框架中的一个类,用于配置获取图片时的选项。它提供了一系列属性,包括以下几个比较常用的:

resizeMode: 图片缩放模式。默认值为 .fast,表示尽可能快地返回一张图像,不管质量如何。其他选项还包括 .exact(尽可能返回一张质量较高的图像)、.none(不进行缩放,返回原始大小的图像)等。
deliveryMode: 图片交付模式。默认值为 .opportunistic,表示尽可能快地返回一张图像,但如果此时需要等待更长时间才能获取高质量的图像,也会继续等待。其他选项还包括 .highQualityFormat(返回最高质量的图像,但可能需要等待较长时间)等。
isSynchronous: 是否同步获取图像。默认值为 false,表示异步获取图像。如果将该属性设置为 true,则会阻塞当前线程,直到获取到图像或者发生错误为止。

- (NSArray*) analysisAssets:(NSArray<PHAsset*>*)assets {
    NSMutableArray * imageArray = [[NSMutableArray alloc] init];
    
    PHImageRequestOptions* option = [[PHImageRequestOptions alloc] init];
    
    option.resizeMode = PHImageRequestOptionsResizeModeFast;
    option.networkAccessAllowed = YES;
    
    CGFloat size = ([UIScreen mainScreen].bounds.size.width - 40) / 3;
    
    for (PHAsset* asset in assets) {
    	// targetSize 图片目标大小,当目标大小为PHImageManagerMaximumSize时,会请求原始大小的图片。
    	// contentMode:
    		/*PHImageContentModeAspectFit: 将图像的内容缩放到目标大小以内,同时保持图像的长宽比。
			PHImageContentModeAspectFill: 将图像的内容裁剪到目标大小以内,同时保持图像的长宽比。
			PHImageContentModeDefault: 根据图像的原始尺寸和目标大小,自动选择AspectFit或AspectFill模式。*/
        [[PHCachingImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(size, size) contentMode:PHImageContentModeAspectFit options:option resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
            
            [imageArray addObject:result];
        }];
    }
    return imageArray;
}

结果展示

在这里插入图片描述


http://www.niftyadmin.cn/n/194880.html

相关文章

全国青少年信息素养大赛2023年python·必做题模拟一卷

全国青少年电子信息智能创新大赛 python必做题模拟一卷 一、单选题 1. 以下哪种输入结果不可能得到以下反馈&#xff1a; 重要的事情说三遍&#xff1a;安全第一&#xff01;安全第一&#xff01;安全第一&#xff01;&#xff08; &#xff09; A、print("重要事情说…

IDEA修改编辑与控制台字体大小

IDEA修改编辑与控制台字体大小 目录IDEA修改编辑与控制台字体大小1.改变编辑窗口字体大小1.1 将字体大小设置为固定值1.2 动态改变字体的大小1.3 改变控制台字体的大小很多小白在刚刚使用IDEA的时候还不是很熟练 本文主要给大家提供一些使用的小技巧&#xff0c;希望能帮助到你…

Python 进阶指南(编程轻松进阶):十六、面向对象编程和继承

原文&#xff1a;http://inventwithpython.com/beyond/chapter16.html 定义一个函数&#xff0c;并从几个地方调用它&#xff0c;可以省去复制和粘贴源代码的麻烦。不复制代码是一个很好的实践&#xff0c;因为如果你需要修改它&#xff08;无论是为了修复一个错误还是添加新特…

CentOS7设置nginx开机自启动

前言 服务器每次重启&#xff0c;都需要手动启动一些服务&#xff0c;这不是一个程序员可以忍受的&#xff0c;难怪大家都喜欢写脚本。接下来三篇文章&#xff0c;分别记录一下nginx、tomcat和mysql的开机自启动配置。 systemd systemd简介 CentOS7已不再使用chkconfig管理…

Matlab 一种计算植物面积密度的新方法(论文复现:凸包法)

文章目录 一、简介三、实现代码三、实现效果参考资料一、简介 该方法基于水平切片和森林冠层凸包来计算出植物面积密度(PAD),具体过程如下所述: 1、第一步是对整个点云进行切片。在每个水平切割( z = z i z = z_i z

大数据五次作业回顾

文章目录1. 大数据作业11.本地运行模式部分2. 使用scp安全拷贝部分2. 大数据作业21、Rrsync远程同步工具部分2、xsync集群分发脚本部分3、集群部署部分3. 大数据作业31. 配置历史服务器及日志2. 日志部分3. 其他4. 大数据作业4编写本地wordcount案例一、源代码二、信息截图5. 大…

【Redis】高可用:为什么要有哨兵机制?

【Redis】高可用&#xff1a;为什么要有哨兵机制&#xff08;Redis Sentinel&#xff09;&#xff1f; 在上文主从复制的基础上&#xff0c;如果注节点出现故障该怎么办呢&#xff1f; 在 Redis 主从集群中&#xff0c;哨兵机制是实现主从库自动切换的关键机制&#xff0c;它有…

数据库及开发语言排行榜官网

目录 数据排行榜官网&#xff1a; 开发语言排行榜官网&#xff1a; 了解过软件开发的同学一定听说过数据库及开发语言排行榜&#xff0c;也在老师哪里看到过相关的截图&#xff0c;但是官网自己却一直找不到&#xff0c;下面就让博主把收集到的两个较为权威的官网分享给大家&…