ios 获取沙河文件夹_沙盒路径获取以及图片保存到相簿的方法
iphone沙盒(sandbox)中的几个目录获取方式:
// 获取沙盒主目录路径
NSString *homeDir = NSHomeDirectory();
// 获取Documents目录路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
// 获取Caches目录路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
// 获取tmp目录路径
NSString *tmpDir = NSTemporaryDirectory();
// 获取当前程序包中一个图片资源(apple.png)路径
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"apple" ofType:@"png"];
UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
保存图片到相册的三种方法:
1、使用UIImageWriteToSavedPhotosAlbum函数将图片保存到相册,如:
- (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);
}
第一个参数是要保存到相册的图片对象
第二个参数是保存完成后回调的目标对象
第三个参数就是保存完成后回调到目标对象的哪个方法中,方法的声明要如代码中所示的:
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;
第四个参数在保存完成后,会原封不动地传回到回调方法的contextInfo参数中。
2、使用AssetsLibrary框架中的ALAssetsLibrary类来实现。具体代码如下:
- (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进行代替,也就是下面所说的第三种方法。
3、使用Photos框架的PHPhotoLibrary类来实现保存到相册功能。代码如下:
- (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属性保存到一个数组中,等待操作完成后再通过这个数组来查找刚刚添加的图片对象。
请看下面栗子:
- (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);
}];
}
}
}];
}
以上这篇沙盒路径获取以及图片保存到相簿的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
ios 获取沙河文件夹_沙盒路径获取以及图片保存到相簿的方法相关推荐
- ios 获取沙河文件夹_关于 iOS 沙盒的目录结构和获取
沙盒目录结构 1. /xxName.app 应用程序的程序包目录,包含应用程序的本身. 2. /Documents/ 保存应用程序的重要数据文件和用户数据文件等.用户数据基本上都放在这个位置(例如从网 ...
- ios 获取沙河文件夹_iOS开发之获取沙盒路径
iOS开发之沙盒机制(SandBox)详细讲解了沙盒的一些机制.在开发中,我们需要对沙盒进行操作,所以我们需要获取到沙盒路径. 沙盒里的文件夹包括Documents.Library.tmp.这三个文件 ...
- unity hub添加找不到文件夹_教师资格证报名网站,IE浏览器“兼容性站点”添加方法。找不到按钮怎么办?...
先文字步骤简述,如果看不懂,后面有图文操作流程. 第一步:打开windows自带浏览器,常常是下图这个样子的. (注意:这个时候按ALT+X+B 三键,不会弹出"兼容性站点"选项. ...
- php图片怎么存入指定文件夹_在PHP中如何把图片存入数据库和文件夹里
$file_dir = "your dir"; //用你的上传目录代替 $tmep_cfile1 = "goods_file".$i; $temp_cf = & ...
- IOS文件管理系统:沙盒、NSFileManager、NSFileHandle、NSCoding、NSKeyedArchiver解析
什么是沙盒? 苹果为我们每个app都分配了一个固定的文件夹,我们在开发过程中可以向文件夹存入我们想要存储的数据,同时也能从这些文件夹取这些数据,但是我们不能取到其他app所存储的数据.简单说,沙盒就是 ...
- python怎么获取所有文件名_python 获取当前文件夹下所有文件名
os 模块下有两个函数: os.walk() os.listdir() #!/usr/bin/env python # -*- coding: utf-8 -*- import os def file ...
- Android基础篇 访问Assets文件夹里面的资源【文本、图片、音频、字体包】
一.创建Assest文件夹 直接把资源复制粘贴到该文件夹下 (1)获取Assets文件夹的管理类 AssetManager assets = getAssets(); (2)遍历文件夹下的资源列表 S ...
- ios 获取沙盒文件名_iOS_沙盒(sandbox)机制及获取沙盒路径和文件操作(NSFileManager)...
⚠️版权声明:本文为博主原创文章,转载必须标明原文出处. 一. 每个iOS应用SDK都被限制在"沙盒"中,"沙盒"相当于一个加了仅主人可见权限的文件夹,苹果对 ...
- ios 获取沙盒文件名_获取IOS各种沙盒路径的方法
在下初学IOS编程,有很多不懂以及不了解的地方,本着分享的精神,将自己学到用到的一些东西写出来,如果有不正确的地方,希望大家指正. 本次讲解的是IOS下各个文件夹的相关知识. 首先,我们应该知道,在I ...
最新文章
- PCL:超详细的基于法向量和曲率的区域生长算法原理以及源码解读
- H5-代码的执行顺序影响着系统的性能:(position)
- wxpython滑动面板_wxPython Panel面板的用法
- 102. 二叉树的层序遍历 golang
- 为什么边缘概率密度是联合概率密度的积分_5.27005柏林联合VS美因茨
- usb转rs485 linux驱动下载,USB转RS485串口驱动
- Python让AI虚拟主播接入微软Azure语音合成并精准嘴型同步
- cad角度命令怎么输入_CAD中用好这个命令,任意等分角度不再是难事
- 安装应用提示安装失败或不能安装,报INSTALL_FAILED_DUPLICATE_PERMISSION错误
- 软件技术人员成长路线的设计
- c语言 GPS nmealib学习笔记
- sql2005数据库添加外键级联删除外键对应的主键行
- Python入门到放弃系列一
- SCAU 18942 偏爱字母
- Java鼠标双击事件
- 使用线性连接图、蛛网图或分枝与混沌图对参数 a 进行讨论与观察【数学实验】【matlab】
- 在统计学中参数的含义是指_第一篇 理解统计学中的基本概念
- ios怎么用spotify_在iOS中通过Spotify进行身份验证
- Android 垃圾分类APP(五)垃圾分类新闻展示
- 深度学习模型压缩与优化加速(Model Compression and Acceleration Overview)
热门文章
- 微信小程序开发之图片上传+Java服务端接收
- java项目中使用支付宝支付(手机端,web端)--菜鸟小回
- 弱视能学计算机应用技术,弱视
- python杂志订阅系统详细设计_图书管理系统详细设计报告
- ChatGPT直播课听不够?微软ATP教你系统化入门人工智能
- 教你如何在你的程序或网站中接入聊天机器人(附实例分享)
- 计算机毕业设计Java中学生作文大赛管理平台(源码+系统+mysql数据库+lw文档)
- 移动端实现淡入淡出、旋转、缩放动画
- 自媒体什么内容最赚钱?哪些平台收益高?
- 原码_反码_补码_移码_阶码