iOS开发之保存图片到Documents目录及PNG,JPEG格式互相转换

先看下面的代码:

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary*)info {

NSString *mediaType
= [info objectForKey:UIImagePickerControllerMediaType];

if ([mediaType isEqualToString:@"public.image"]){

image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

NSData *data;

if (UIImagePNGRepresentation(image)
== nil) {

data
= UIImageJPEGRepresentation(image, 1);

} else {

data
= UIImagePNGRepresentation(image);

}

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *filePath = [NSString stringWithString:[self getPath:@"image1"]];         //将图片存储到本地documents

[fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];

[fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:dataattributes:nil];

UIImage *editedImage = [[UIImage alloc] init];

editedImage = image;

CGRect rect = CGRectMake(0, 0, 64, 96);

UIGraphicsBeginImageContext(rect.size);

[editedImage drawInRect:rect];

editedImage
= UIGraphicsGetImageFromCurrentImageContext();

UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];

imageButton.frame = CGRectMake(10, 10, 64, 96);

[imageButton setImage:editedImage forState:UIControlStateNormal];

[self.view addSubview:imageButton];

[imageButton addTarget:self action:@selector(imageAction:)forControlEvents:UIControlEventTouchUpInside];

[ipc dismissModalViewControllerAnimated:YES];

} else {

NSLog(@"MEdia");

}

上面的代码是当从相册里面选取图片之后保存到本地程序沙盒,在上面我们得到的图片中不能够得到图片名字,以及不清楚图片格式,所以这个时候我们需要将其转换成NSdata二进制存储,

image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

NSData *data;

if (UIImagePNGRepresentation(image)
== nil) {

data
= UIImageJPEGRepresentation(image, 1);

} else {

data
= UIImagePNGRepresentation(image);

}

UIImagePNGRepresentation转换PNG格式的图片为二进制,如果图片的格式为JPEG则返回nil;

[fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:data attributes:nil];  
 将图片保存为PNG格式

[fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.jpg"] contents:data attributes:nil];  
将图片保存为JPEG格式

我们也可以写成下面的格式存储图片

NSString *pngImage = [filePath
stringByAppendingPathComponent:@"Documents/image.png"];

NSString *jpgImage = [filePath
stringByAppendingPathComponent:@"Documents/image.jpg"];

[data writeToFile:pngImage atomically:YES];

[data writeToFile:jpgImage atomically:YES];

时间: 2024-11-06 12:12:06

iOS开发之保存图片到Documents目录及PNG,JPEG格式互相转换的相关文章

iOS开发之进阶(博文目录)持续更新

内存机制 0.iOS内存管理策略和实践 1.Swift中的ARC Block 0.教你爱上Blocks(闭包) 1.Objective-C中的Block(王巍) 2.Objective-C中的Block(付宇轩) 多线程 0.深入理解 GCD(一) 网络 0.NSURLCache 1.IP,TCP 和 HTTP 运行时 0.深入Objective-C的动态特性 1.Objective-C Runtime 数据持久化 0.Core Data入门 1.CoreData处理海量数据 2.初识Core

IOS开发之网络篇第一章:数据交换格式

网络通信最常用的数据通信格式是xml和Json,各有各的好处,不管怎样,这种的格式,我们在开发的过程中经常使用的,现在就这两种格式进行记录笔记,以下内容不做详细分析,只针对如何应用各种读写工具进行对xml和json内容的操作 xml 解析XML文件现在有两种主流的,SAX和DOM SAX-基于时间事件驱动,意思就是读取的过程中,是由上往下的读取xml文件,当遇到节点的时候,触发相应的事件,使用上比较快,缺点是不能修改文件内容 DOM-以树状形式加载,加载后存放在内存当中,所以如果文件大,读取的时

在IOS开发中,项目的目录结构如何搭建?

网上有很多关于IOS开发的学习资料.然而却很少有关于设计一个项目时,如何设计其目录结构?这对于自学IOS的程序猿们,无疑有诸多不利.接下来,我就简单的谈下真正在公司中,项目的目录结构如何搭建: 以上为第一种,先按照功能模块进行划分,然后遵循MVC设计模式,分别设置model,view,control子文件夹.对于非项目模块类,以及一些自己写的一些分类,第三方框架等等,存储在other中,如上图所示. 至于另外一种方案,则是先以MVC进行划分,然后针对于model,view,control,进行子

IOS开发-学习目录

文笔较差,就不多说废话.现在断断续续看了快一个月的ios开发了,所以写一个目前觉得比较适合自己的教程做个目录,今后的学习主要就按这个目录进行. 1.<objective-c基础教程>下载地址:http://download.csdn.net/detail/qing2005cheng/4992186 本书主要适合接触了一点objective-c\c\c++语法之后看,知识点介绍得比较连贯,按着上面的例子做的,对一些平时没注意的语法等东西都有介绍. 2.ios开发系列博客文章:http://www

【热门收藏】iOS开发人员必看的精品资料(100个)——下载目录

iPhone.iPad产品风靡全球,巨大的用户群刺激着iOS软件开发需求,然而国内人才缺口很大,正处于供不应求的状态,ios开发前景大好.我们整理了51CTO下载中心100份热门的ios开发资料,做了一个地址收藏目录,方便大家选择性下载.里边均是好资料,相信对学习ios开发有所帮助.目录下载地址:http://down.51cto.com/data/416672 附件预览如下: iOS游戏开发之Unity3D引擎系列 http://down.51cto.com/zt/399 iPadian软件:

iOS开发总结——项目目录结构

1.前言 清晰的项目目录结构有利于项目的开发,同时也是软件架构的一部分,所以,项目开发之初搭建项目的目录结构很重要.刚转iOS时,自己并不知道如何搭建App的项目目录,在参与开发两个应用后,结合Web开发的目录习惯我整理了自己的目录结构.分享一下,欢迎交流. 2.我的项目目录结构 项目目录 ├── ThirdLib(三方库) │ ├── SDWebImage │ └── AFNetworking ├── Framework(自己封装的类库) ├── General(通用类目录) │ ├── Cl

《iOS开发进阶》书籍目录

第一部分:iOS开发工具 第二部分:iOS开发实践 第10章 理解内存管理 10.1 引用计数 10.1.1 什么是引用计数,原理是什么 10.1.2 我们为什么需要引用计数 10.1.3 不要向已经释放的对象发送消息 10.1.4 循环引用(reference cycles)问题 10.1.5 使用Xcode检测循环引用 10.2 使用ARC 10.2.1 Automatic Reference Count 10.2.2 Core Foundation对象的内存管理 第11章 掌握GCD 11

【转】iOS开发24:使用SQLite3存储和读取数据

转自:http://my.oschina.net/plumsoft/blog/57626 SQLite3是嵌入在iOS中的关系型数据库,对于存储大规模的数据很有效.SQLite3使得不必将每个对象都加到内存中. 基本操作: (1)打开或者创建数据库 sqlite3 *database; int result = sqlite3_open("/path/databaseFile", &database); 如果/path/databaseFile不存在,则创建它,否则打开它.如果

IOS开发--数据持久化篇之文件存储(一)

前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不胜感激. 什么叫数据持久化: 在这里我就不照搬教科书上抽象的概念了.我觉得既然要把东西写出来就让它简单明了. 要搞清楚数据持久化,首先要知道数据持久化是相对于缓存而言的,缓存是在程序运行的过程中保存在内存中,程序一旦运行结束,其内存就会被释放.缓存在内存中的数据也就随之消失. 那么数据持久化就是要解