iOS 保存图片到手机的几种方法--(OC)

【绘图案例-UIImage保存到相册 Objective-C语言】 阅读详情

在使用前  请导入photos.framework

然后导入

1
#import #import #import

方法一

使用UIImageWriteToSavedPhotosAlbum函数将图片保存到相册,如:

1
2
3
4
5
6
7
8
- (void)loadImageFinished:(UIImage *)image
{
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), (__bridge void *)self);
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    NSLog(@"image = %@, error = %@, contextInfo = %@", image, error, contextInfo);
}

第一个参数是要保存到相册的图片对象

第二个参数是保存完成后回调的目标对象

第三个参数就是保存完成后回调到目标对象的哪个方法中,方法的声明要如代码中所示的:

1
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;

第四个参数在保存完成后,会原封不动地传回到回调方法的contextInfo参数中。

方法二

使用AssetsLibrary框架中的ALAssetsLibrary类来实现。具体代码如下:

1
2
3
4
5
6
7
8
- (void)loadImageFinished:(UIImage *)image
{
    __block ALAssetsLibrary *lib = [[ALAssetsLibrary alloc] init];
    [lib writeImageToSavedPhotosAlbum:image.CGImage metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
        NSLog(@"assetURL = %@, error = %@", assetURL, error);
        lib = nil;
    }];
}

使用了ALAssetsLibrary类的writeImageToSavedPhotosAlbum:metadata:completionBlock:方法实现。其中第一个参数是一个CGImageRef的对象,表示要传入的图片。第二个参数是图片的一些属性,这里没有设置所以传入nil。最后一个completionBlock是保存完成后的回调,在这个回调中可以取到保存后的图片路径以及保存失败时的错误信息。

注意:使用该类时需要导入AssetsLibrary.framework。而且该类需要在iOS4.0以上可以使用,但是在iOS9.0之后就被标记为过时方法。官方建议使用Photos.framework中的PHPhotoLibrary进行代替,也就是下面所说的第三种方法。

方法三

使用Photos框架的PHPhotoLibrary类来实现保存到相册功能。代码如下:

1
2
3
4
5
6
7
8
9
- (void)loadImageFinished:(UIImage *)image
{
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
         /写入图片到相册
         PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
     } completionHandler:^(BOOL success, NSError * _Nullable error) {
         NSLog(@"success = %d, error = %@", success, error);
    }];
}

该例子中先调用PHPhotoLibrary类的performChanges:completionHandler:方法,然后在它的changeBlock中,通过PHAssetChangeRequest类的creationRequestForAssetFromImage:方法传入一个图片对象即可实现保存到相册的功能。然后completionHandler中会告诉我们是否操作成功。

进阶使用:得到保存到相册的图片对象

也许会有人需要在保存相册后得到图片的PHAsset对象来进行后续操作(昨天刚好碰到有朋友遇到这样的问题)。那么,这里对上面例子进行改进,在创建PHAssetChangeRequest后将它的placeholderForCreatedAsset属性的localIdentifier属性保存到一个数组中,等待操作完成后再通过这个数组来查找刚刚添加的图片对象。请看下面栗子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
- (void)loadImageFinished:(UIImage *)image
{
    NSMutableArray *imageIds = [NSMutableArray array];
        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
            //写入图片到相册
            PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
            //记录本地标识,等待完成后取到相册中的图片对象
            [imageIds addObject:req.placeholderForCreatedAsset.localIdentifier];
        } completionHandler:^(BOOL success, NSError * _Nullable error) {
            NSLog(@"success = %d, error = %@", success, error);
            if (success)
            {
                //成功后取相册中的图片对象
                __block PHAsset *imageAsset = nil;
                PHFetchResult *result = [PHAsset fetchAssetsWithLocalIdentifiers:imageIds options:nil];
                [result enumerateObjectsUsingBlock:^(PHAsset * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    imageAsset = obj;
                    *stop = YES;
                }];
                if (imageAsset)
                {
                    //加载图片数据
                    [[PHImageManager defaultManager] requestImageDataForAsset:imageAsset
                          options:nil
                          resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
                               NSLog("imageData = %@", imageData);
                          }];
                }
            }
        }];
}

总结

第一种方式是最常用的,使用起来很方便,传入UIImage就可以了,也不需要担心iOS不同版本的问题。唯一缺点就是无法找到对应添加的图片。

第二种方式是iOS4之后加入的,在iOS9后又不推荐使用了。他也提供了很直观的方式来保存图片,并且也能够取到保存后相对应的图片路径。

第三种方式是iOS8之后加入的,他的使用稍微复杂一点,但是它允许进行批量的操作,例如添加、修改、删除等。如果要做更加复杂的操作的话,这种方式是比较推荐的方式。

原文出自:http://www.cocoachina.com/ios/20170629/19676.html?utm_source=itdadao&utm_medium=referral

Unity3D,获取相册图片,手机拍照 Unity端 先新建个项目吧,添加一个Button和两个UIimage吧。之后我们提取的相片会在UIimage上显示。 至于为什么要两个,主要是一会我还要进行图片的压缩。然后把小图也显示出来。 新建个脚本,代码如下: public void GetBigImage(string filename){ string path="file://"+platformPath+fi 阅读详情

相关推荐

cocos用oc截屏保存到相册.zip

cocos2d-3.0,c++和oc混编,用oc截屏保存到相册iOS,大概就是这样子

iOS下将照片保存到相册的三种方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34194359的博客 707

不用Root!这些隐藏代码能一键开启安卓诊断端口(小米/OPPO/魅族机型实测)

本文提供了一份无需Root权限即可开启安卓手机诊断端口的实用指南。通过拨号盘输入特定隐藏代码,小米、OPPO、魅族等机型的用户可以一键激活此工程模式,从而连接电脑进行基带数据备份(如QCN文件)或故障排查。文章详细列出了各品牌指令、操作验证步骤,并强调了备份IMEI等关键数据的重要性与操作风险,旨在帮助用户在紧急情况下修复网络问题。

weixin_29260291的博客 272

OC简单实现本地图片保存

OC简单实现本地图片保存 首先导入头文件 #import <Photos/PHPhotoLibrary.h> Ps:不要忘记这个NSPhotoLibraryAddUsageDescription 然后下载方法 - (void)buttonDownloadTarget{ //判断是不是可以下载 BOOL isSave =[self isCanDown]; __weak typeof(self) weakSelf = self; if (is...

weixin_42611061的博客 2671

SRCNN超分辨率Pytorch实现,代码逐行讲解,附源码

超分辨率,就是把低分辨率(LR, Low Resolution)图片放大为高分辨率(HR, High Resolution)的过程。通过CNN将图像Y 的特征提取出来存到向量中。用一层的CNN以及ReLU去将图像Y 变成一堆堆向量,即feature map。把提取到的特征进一步做非线性映射,加大网络深度,提高网络复杂性。结合了前面得到的补丁来产生最终的高分辨率图像。实验步骤。

weixin_52261094的博客 3万+

用STM32CubeMX和HAL库,5分钟搞定TB6612驱动直流电机(附完整代码)

本文详细介绍了如何使用STM32CubeMX和HAL库快速配置TB6612驱动直流电机,包括硬件连接、CubeMX工程配置、电机驱动逻辑实现及进阶优化技巧。通过图形化工具和代码示例,即使是新手也能在5分钟内完成电机调速系统的搭建,大幅提升开发效率。

weixin_26854829的博客 266

iOS开发-OC之图片保存到相册

#import "ViewController.h"      @interface ViewController ()      @property (nonatomic , strong)UIAlertView *myAlertView;   @property (nonatomic , strong)UIAlertView *myAlertView2;      @end

My_Dream的博客 1523

【Spreadsheet】香港规范结构设计电子表格库开发方案

深入理解香港本地规范特点和要求结合国际先进标准(Eurocode) 的技术内容考虑香港地理环境特殊性 (台风、地质等)建立完善的质量控制体系保持持续更新维护的能力。

hmywillstronger的博客 1361

iOS - 保存图片至系统相册

iOS - 保存图片至系统相册背景保存图像至相册方法UIImageWriteToSavedPhotosAlbum()AssetsLibrary框架 (==iOS 4.0被引入、iOS 9.0被废弃==)Photos框架相册图片展示问题插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少...

c_zzjsdmj的博客 4585

华南理工大学-大学物理实验-绪论作业

3.用公式测量某圆柱体铝的密度,测得直径=2.0420.003(cm),高=4.1260.004(cm),质量=36.4880.006(g)。计算铝的密度和测量的标准差,并以测量结果表达式表示之。(要求判别和剔除异常数据)(30分)(了解图解法的注意事项,大学物理实验众多实验数据处理采用这种方法,如PN结温度特性研究,光电效应与普朗克常数的测定,霍尔效应测磁场等等,注意规范作图)实验测得温度与对应的金属丝的长度的数据如下表所示。(了解异常数据的判断方法及具体判断过程,30分的题目n(*≧▽≦*)n)

mohen_777的博客 580

基于YOLOv8深度学习架构的智能农业巡检小车系统—面向农作物与杂草实时精准识别的创新实践

本研究设计并实现了一套基于YOLOv8的智能农业巡检小车系统,解决农田中农作物与杂草的精准识别与追踪问题。系统采用改进YOLOv8-RGCSPELAN-ECA-AFPN模型,融合ECA注意力机制与AFPN多尺度特征融合结构,提升复杂环境下的检测精度。硬件以树莓派4B为核心,集成摄像头、传感器与电机模块,具备避障、循迹与自主导航功能。移动端基于Android部署NCNN推理引擎,实现模型高效移植与实时检测。

Stara-AI的博客 1424

(干货)Unity保存图片到手机相册并刷新相册(Android和IOS都有哦)

@这周末的时候帮同事做个东西,就是要保存图片到手机相册并且实现双端的,我一听一脸懵逼,我一个半路出家的Unity3D和CocosCreater 程序员不懂原生啊!没办法答应了就要做到。回到正题,下面直接出代码:(注:我这边是直接保存Image的内容,要是截图可能要你们自己实现啊) 这个是目录层级,Plugins/Android/classes,这个是C#调用安卓的刷新相册的方法 IOS文件夹里面的...

q3386776的博客 6964

基于点云数据的统计滤波算法改进

随着三维视觉和点云处理技术的发展,点云数据在机器人、自动驾驶、增强现实等领域得到了广泛应用。而点云数据中常常包含着各种噪声和异常点,这些噪声和异常点会影响后续的数据处理和分析任务。因此,对点云数据进行滤波处理是必不可少的一步。在点云滤波算法中,统计滤波(Statistical Filtering)是一种常见且有效的方法。它通过对点云数据进行统计分析,将噪声和异常点剔除或修复,从而得到更为准确和可靠的点云数据。本文将介绍一种改进的统计滤波算法,并提供相应的源代码实现。

QfcaLinux的博客 292

沙盒内视频或图片保存到手机相册

保存 UIImage *img0 = [UIImage imageWithContentsOfFile:[CommonTools getPathByfileName:@"hello_0.bmp"]]; UIImage *img1 = [UIImage imageWithContentsOfFile:[CommonTools getPathByfileName:@"hello_1.bmp"

LLLL: 的博客 2784

Android11.0(R) MTK 平台开机logo动态替换(by logo.bin方式)

实现的效果 客户提供一张格式为 bmp 的开机logo,在 linux 环境下执行制作 logo.bin 脚本文件, apk 拷贝 logo.bin 文件替换系统原有的bin,然后重启 logo 自动更新。 原理分析 MTK 平台的充电图片和开机logo都是打包到 logo.bin 中的 对应的资源路径在源码 vendor\mediatek\proprietary\bootable\bootloader\lk\dev\logo 系统一般预制了很多分辨率文件夹,实际通过 BOOT_LOGO 来确定打包那一个

cczhengv 4585

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

iOS-OC-图片水印,图片裁剪和屏幕截图

1.图片水印 <span style="font-size:18px;">- (void)getnewImage { UIImage *bgImage = [UIImage imageNamed:@""]; //创建一个位图上下文 UIGraphicsBeginImageContextWithOptions(bgImage.size, NO, 0.0...

CC的博客 1213

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

iOS 保存图片视频到手机相册

//保存相册UIKIT_EXTERN void UIImageWriteToSavedPhotosAlbum(UIImage *image,__nullableid completionTarget,__nullableSEL completionSelector,void *__nullable contextInfo)__TVOS_PROHIBITED;//xcode中的方法 U...

代码解释生活 2237

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Qt跨平台--IOS保存图片到相册

Qt跨平台--IOS保存图片到相册使用OC原生代码的配置链接源文件链接OC库头文件的引入OC代码Xcode info.plist配置 使用OC原生代码的配置 因为要访问手机上的相册,故使用OC原生代码,OC原生代码需要Xcode能编译链接,故需要更改pro相关配置 链接源文件 关键字:OBJECTIVE_SOURCES 添加源文件不是使用常规的 SOURCES+= XXX.mm 而是使用 O...

syz9011的博客 831

分解gif图片并保存

代码如下: -(void)deCompositionGif{     NSString *gitpathSource = [[NSBundle mainBundle]pathForResource:@"名称" ofType:@"gif"];     NSData *data =[NSData dataWithContentsOfFile:gitpathSource];     CGImag

NoPolun_iOS的博客 3031

iOS GIF动态图(显示、上传、保存)

iOS系统提供的UIImageView控件是不支持GIF的加载的,在APP开发中会使用到一些GIF图片,本文主要讲解苹果手机上GIF图使用方法,主要是基于SDWebImage框架。 一、界面显示: 1.先集成SDWebImage及SDWebImage/GIF框架 pod 'SDWebImage' pod 'SDWebImage/GIF' 2.使用SDWebImage/GIF框架提供的兼容...

qq_30356665的博客 2676

Cocos2dx在IOS平台中将截屏保存到到手机相册

最近使用Cocos2dx 2.2.3进行IOS游戏开发,碰到了关于截屏路径的一个问题,cocos2dx本身自带了截屏的功能,代码如下: CCSize size = CCDirector::sharedDirector()->getWinSize(); CCRenderTexture* renderTexture = CCRenderTexture::create(size.w

w450468524的专栏 2192

swift 保存照片到手机相册中

前边可以自己添加一个触发方法例如点击方法,之后调用下面的语句 UIImageWriteToSavedPhotosAlbum(customImageView.image!, self, #selector(image(image:didFinishSavingWithError:contextInfo:)), nil)  添加相关的方法  func image(image:UIIma

NoPolun_iOS的博客 4619

图片剪切 iOS

iOS 图片裁剪 OC

NoPolun_iOS的博客 803

iOS简单高效的将图片存入沙盒,并再次调用(避坑指南)

为了增强一些用户体验,防止图片频繁下载,或者想取用一些手机本地的照片存在程序内,我们就需要将图片存入程序沙盒内,并在需要的时候再次调用,因为iOS的程序每次启动,沙盒路径都会变,所以我们只能存储Documents文件夹之后的路径。 闲话少说,上代码! //保存图片到沙盒内,并返回存储图片的后缀地址 + (NSString *)saveImageToCacheUseImage:(UIImage ...

zyx980193917的博客 3372

iOS开发技巧之:相册中的GIF图片的读取与保存

大家都知道iOS的系统相册是不支持gif图片预览的。但是,这并不代表系统相册不能保存和读取gif图片。通过Safari长按gif图片,选择保存到相册,这时保存到相册里的图片就是gif的,虽然它不会动。 下面将介绍如何对系统相册进行gif的读取与保存。 什么是 UTI iOS系统相册是根据 UTI 来区分资源类型的。那什么是 UTI呢。UTI字面意思是:Uniform Type Ide

vkooy的博客 7782

iOS-iOS调用相机调用相册【将图片保存到本地相册】

设置头部代理 <UINavigationControllerDelegate, UIImagePickerControllerDelegate> 1.调用相机 检测前置摄像头是否可用 - (BOOL)isFrontCameraAvailable{ return [UIImagePickerController isCameraDeviceAvailable...

weixin_30258901的博客 265
上一篇: 释放原来的键盘,取消键盘等的第一相应者身份
下一篇: html字符串转富文本字符串(Swift 4)
FlyingFireFish
博客等级 码龄9年 23粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值