保存图片到【相机胶卷】和【自定义相册】

iOS保存图片到相册 方法1:用C语言函数UIImageWriteToSavedPhotosAlbum实现 //参数1:图片对象 //参数2:成功方法绑定的target //参数3:成功后调用方法 //参数4:需要传递信息(成功后调用方法的参数) UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); #pragma mark -- &l.. 阅读详情

一、保存图片到【相机胶卷】

方法一:C语言函数
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    UIImageWriteToSavedPhotosAlbum(self.img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}


- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    if (error) {
        NSLog(@"保存失败");
    } else {
        NSLog(@"保存成功");
    }
}
方法二:AssetsLibrary 框架

作为一套老框架,AssetsLibrary 不但有坑,而且还不少。比如,AssetsLibrary 实例需要强引用,遵循写入优先原则…现在已经被 Photos 框架代替,这里就不做介绍。

方法三:Photos 框架 —— #import <Photos/Photos.h>
// 异步执行修改操作

// 在这里保存图片到相册
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{  

    [PHAssetChangeRequest creationRequestForAssetFromImage:self.img];

} completionHandler:^(BOOL success, NSError * _Nullable error) {

    if (error) {
        NSLog(@"保存失败");
    } else {
        NSLog(@"保存成功");
    }
}];
// 同步执行修改操作

NSError *error = nil;

[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

    [PHAssetChangeRequest creationRequestForAssetFromImage:self.img];

} error:&error];

if (error) {
    NSLog(@"保存失败");
} else {
    NSLog(@"保存成功");
}

二、保存图片到【自定义相册】

Photos 框架基本方法概况
  • PHAsset:一个 PHAsset 对象就代表相册中的一张图片或者视频

    • 查:[PHAsset fetchAssets…]

    • 增删改:[PHAssetChangeRequest creation…/delete…]

  • PHAssetCollection:一个 PHAssetCollection 代表一个相册

    • 查:[PHAssetCollection fetchAssetCollections…]

    • 增删改:[PHAssetCollectionChangeRequest creation…/delete…]

方法步骤
  • 0.判断相册权限
PHAuthorizationStatus oldStatus = [PHPhotoLibrary authorizationStatus];

// 如果用户还没有做出选择,会自动弹框,用户对弹框做出选择后,才会调用block
// 如果之前已经做过选择,会直接执行block
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    // block中是在子线程中进行,如果刷新UI需要回到主线程
    dispatch_async(dispatch_get_main_queue(), ^{
        if (status == PHAuthorizationStatusDenied) {
            NSLog(@"用户拒绝当前APP访问相册");

            // 如果状态不等于没有做决定
            if (oldStatus != PHAuthorizationStatusNotDetermined) {
                NSLog(@"提醒用户打开开关");
            }
        } else if (status == PHAuthorizationStatusAuthorized) {
            NSLog(@"用户允许当前APP访问相册");
        } else if (status == PHAuthorizationStatusRestricted) {
            NSLog(@"无法访问相册");
        }
    });
}];
  • 1.保存图片到【相机胶卷】
NSError *error = nil;

__block NSString *assetID = nil;  // 图片的ID
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
    assetID = [PHAssetChangeRequest creationRequestForAssetFromImage:image].placeholderForCreatedAsset.localIdentifier;
} error:&error];
if (error) {
    NSLog(@"MYPhotoTool - 保存失败");
}
  • 2.拥有一个【自定义相册】
// 获取软件名字
NSString *title = [NSBundle mainBundle].infoDictionary[(NSString *)kCFBundleNameKey];

// 获取所有自定义相册
PHFetchResult<PHAssetCollection *> *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
// 查找当前APP对应的自定义相册
for (PHAssetCollection *collection in collections) {

    // *** 如果存在自定义相册
    if ([collection.localizedTitle isEqualToString:collectionName]) {
        return collection;
    }
}

// *** 自定义相册没有被创建过

__block NSString *ID = nil;

NSError *error = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

    // 创建一个【自定义相册】
    PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:collectionName];
    // 获取站位标识
    ID = request.placeholderForCreatedAssetCollection.localIdentifier;
} error:&error];

if (error) {
    NSLog(@"MYPhotoTool - 创建自定义相册失败");
    return nil;
}

// 根据站位标识获取当前APP对应的自定义相册
PHAssetCollection *collection = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[ID] options:nil].firstObject;
  • 3.添加刚才保存的图片到【自定义相册】
NSError *error = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
    PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];
    id<NSFastEnumeration> assetIDs = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetID] options:nil];
    [request insertAssets:assetIDs atIndexes:[NSIndexSet indexSetWithIndex:0]];
} error:&error];

if (error) {
    NSLog(@"MYPhotoTool - 保存失败");
}

三、选择照片到项目中

1.从相册中选择照片
  • UIImagePickerController(自带选择界面)(只能选择单张图片)
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.delegate = self;  // <UINavigationControllerDelegate, UIImagePickerControllerDelegate>
[self presentViewController:picker animated:YES completion:nil];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
    [picker dismissViewControllerAnimated:YES completion:nil];    
    self.imgView.image = info[UIImagePickerControllerOriginalImage];
}
  • AssetsLibrary 框架

  • Photos 框架

网上基于 Photos 框架的三方框架一搜一大堆,就不浪费时间造轮子了。其实是最近项目太紧了,没时间弄,等年后抽时间把这部分补充一下吧。

2.选择相机拍摄的照片
  • UIImagePickerController(自带选择界面)

    和从相册中选择照片一样,改变 sourceType 就可以了

  • AVCaptureSession —— #import <AVFoundation/AVFoundation.h>



保存图片到【相机胶卷】和【自定义相册】框架和 DEMO 已经上传到 github ,下载地址:MYPhotoTool

华为交换机密码策略配置避坑指南:明文/密文、长度、复杂度,一个命令就出错 本文详细解析华为交换机密码策略配置的关键要点,包括密码长度、复杂度及等保合规要求。通过实战案例揭示常见配置误区,如明文/密文密码格式差异、复杂度检查联动机制等,帮助网络工程师避免安全漏洞。特别针对等保二级和三级要求,提供可直接落地的安全加固方案。 阅读详情

相关推荐

阿里开源最强数字人工具 EchoMimicV2,本地部署(一)

EchoMimicV2是阿里推出的半身人体AI数字人项目,基于参考图片、音频剪辑和手部姿势序列生成高质量动画视频,确保音频内容与半身动作的一致性。现在本地部署,安装体验一下。

缘分天空的专栏 4614

iOS——存储图片到自定义相册

1、将图片存储到系统相册“相机胶卷” /* 将图片保存到系统相册(相机胶卷) */ +(PHObjectPlaceholder *)saveToCameraRollAlbumnWithImage:(UIImage *)image { __block PHObjectPlaceholder *placeHolder = nil; NSError *err;

chy305chy的专栏 936

经典密码体制(上)

头歌

shannidawang的博客 3086

iOS 保存图片到相册

开发步骤 给UIImageView添加一个点击手势,点击弹出图片控制器 图片控制器中的子视图包括UIScrollView、一个返回按钮、一个保存按钮 保存图片到【相机胶卷】中 C语言函数:UIImageWriteToSavedPhotosAlbum AssetsLibrary框架 Photos框架 自定义一个相册,相册名字一般为应用的名称 AssetsLibrary框架 Photos框架 将

人不风流枉少年 1412

MOSFET热失效机理与保护电路设计:实战案例

深入解析MOSFET工作原理及其在高温下的失效机制,结合实际案例探讨有效保护电路设计,提升系统可靠性与安全性。

weixin_28713083的博客 850

智能车图像处理去畸变+逆透视教程

图像处理,去畸变与逆透视整合

wu58430的博客 1万+

获得自定义的所有相簿

// 获得所有的自定义相簿 PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegula...

abc48765的博客 356

PHP实战:5分钟搞定SM4国密加密算法集成(附完整代码)

本文详细介绍了如何在PHP项目中快速集成SM4国密加密算法,提供完整的代码实现和实际应用示例。从算法原理到核心代码解析,再到性能优化与安全实践,帮助开发者高效实现数据加密功能,满足金融、政务等领域的合规需求。

weixin_29315569的博客 353

iOS 自定义相册

目录(?)[-] One    将图片保存到系统的相册中Two    AssetsLibrary/AssetsLibrary.h>苹果原生框架Three  iOS8推出的Photos/Photos.h> 一共有两种方法自定义相册 第一种是iOS9之后过期的 AssetsLibrary/AssetsLibrary.h>苹果原生框架 第二种是iOS8推出的Photos/Photos.h> 苹果

六六的博客 1376

医学图像分割评价指标详解:从Dice到MSD的实战解析

本文深入解析医学图像分割的核心评价指标,从最常用的Dice相似系数到衡量边界精度的MSD(最大对称表面距离),通过实战案例与代码演示,系统阐述各指标的计算原理、应用场景及临床意义,帮助读者全面评估模型性能。

weixin_29070721的博客 593

vLLM 显存泄漏与 OOM 深度排查:从日志到火焰图

系统性地排查 vLLM 运行中的显存泄漏和 OOM 问题,包括 CUDA 内存快照、PyTorch 内存分析器、火焰图工具。

kaixin110a的博客 186

iOS-保存图片到(自定义)相册步骤

保存到相册步骤: 1.保存图片到【相机胶卷】 2.拥有一个【自定义相册】 3.将刚才保存到【相机胶卷中的图片】引用到【自定义相册】 ①保存图片到【相机胶卷】 /* 一、保存图片到【自定义相册】 1.保存图片到【相机胶卷】 1> C语言函数UIImageWriteToSavedPhotosAlbum 2> AssetsLibrary框...

weixin_30763455的博客 565

13、基于RBF的自适应鲁棒控制与反步控制方法及实现

本文介绍了基于RBF神经网络的自适应鲁棒控制与反步控制方法,详细阐述了控制系统的程序结构、核心算法及实现流程。通过Simulink搭建仿真系统,利用RBF网络逼近系统中的不确定非线性函数,并结合Lyapunov稳定性理论设计控制律,实现了对倒立摆等复杂非线性系统的高精度跟踪控制。文章还提供了完整的MATLAB/Simulink代码示例和仿真结果分析,验证了该方法的有效性与鲁棒性,为实际工程应用提供了可行的技术路径。

ol789012的博客 87

ios 保存图片到相册 崩溃_iOS保存图片到相册

在APP中点击照片,都会显示出大图,然后在大图的上面会有个保存照片的按钮,照片直接保存到了系统的【相机胶卷】相册中,但是因为公司产品的需要,我们需要创建和APP同名的相册保存在【自定义相册】里面,这也就是分应用存储,因为用户可能从QQ,微信,微博分别存储,下次用户想找某个应用的图片,直接点开该应用相册即可,提高用户体验。注意:【自定义相册】里面的图片来源于【相机胶卷】相册中,即:【相机胶卷】引用【...

weixin_39949607的博客 908

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用最新的iOS9 开始推荐使用的<Photos/Photos.h>这个框架实现保存图片或者视频

获得自定义的所有相簿// 获得所有的自定义相簿 PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular o

染指流年 3279

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

iOS开发-自定义专属相册 (详细)| 干货

我们在APP中点击照片,都会显示出大图,然后在大图的上面会有个保存照片的按钮,照片直接保存到了系统的相册中,但是因为公司产品的需要,让你创建和APP同名的相册保存在里面,那么就对了,可以看下具体的代码和思路,然后把代码直接拿过去就可以用了,对,没错,站在巨人的肩膀上编程 一共有两种方法自定义相册 第一种是iOS9之后过期的 AssetsLibrary/AssetsLibrary.h>苹果原生

dongtinghong的专栏 6500

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

iOS保存图片到新建相册(iOS Photos)

1.直接保存图片相册中(不需要自己创建新的相簿) - (void)saveImage2Photo:(UIImage *)img { UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:),nil); } - (void)image:(UII

木木不 5793

iOS 下的相册与图片处理

iOS 下的相册与图片处理  需求 很多公司项目中都会使用到相册,以及相机,保存图片,从相册中选取图片等等操作。本文将详细介绍该功能如何实现优化,以及使用一些优秀的第三方库来辅助完成我们的需求。 photos framework 的使用 Photos Framework reference Classes PHAdjustmentData /* When a user ed...

weixin_34301307的博客 261

iOS获取、写入系统相册图片

####为什么要调用系统相册 现在很多项目都会用到调用系统相册,例如保存图片到系统相册、选取相册中的图片、给联系人设置头像、聊天时给好友发送照片等。下面就看下如何调取系统相册: ####读取方式 *读取一张图片 我们可以利用UIImagePickerController这个类来完成,代码比较简单如下所示 遵守<UIImagePickerControllerDelegate,UINavig...

weixin_33762321的博客 211

iOS8开发之 PHAsset 保存图片到相册(相机胶卷) 详解一

http://segmentfault.com/a/1190000003950935 平时开发APP时难免会遇到保存图片到相册的相关操作,具体我么可以直接保存到系统的相机胶卷, 也可以自定义相册保存图片,下面我们就一起来看一看. 保存图片到系统相册 先看看比较简单的直接保存图片到系统相册操作 - (IBAction)save { // 存储图片到"相机胶卷"

jeffasd的专栏 6231

iOS 保存图片(视频)到相册

1、C语言函数方式实现 注意:UIImageWriteToSavedPhotosAlbum方法必须实现代理方法,否则会崩溃。 //参数1:图片对象 //参数2:成功方法绑定的target //参数3:成功后调用方法 //参数4:需要传递信息(成功后调用方法的参数) UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, ...

weixin_30564785的博客 956

ios 用户相册

1 ## 获得自定义的所有相簿 2 3 // 获得所有的自定义相簿 4 PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAss...

weixin_33906657的博客 154

c语言保存图片image,iOS 保存图片到【自定义相册】

3.1、Photos 框架基本认识,我们可以在 Help->Developer Documentation-> 选择OC或者Swift 搜索 PhotosPhotos 框架检索Photos 是用来处理 视频 与 图片 的,下面是其主要的类<1>、PHAsset:一个 PHAsset 对象就代表相册中的一张图片或者一个视频(1)、查:[PHAsset fetch.....](...

weixin_34944897的博客 865

【iOS开发】---- 如何将图片保存至自定义分组

一般我们照片存储都是直接存储在相机胶卷中,调用下面的方法就可以了: void UIImageWriteToSavedPhotosAlbum ( UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo );

冻僵的企鹅'zone 4294
上一篇: 加载 Bundle 中图片的三种方法
下一篇: 零耦合仿百度外卖波浪动画
mayan29
博客等级 码龄11年 13粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值