文档章节

iOS 读取图片的各种方法

sfandy
 sfandy
发布于 2015/04/30 00:09
字数 579
阅读 5
收藏 0
iOS 读取图片的各种方法

  (2012-12-19 20:04:02)

转载

标签: 

杂谈


一.读取图片

1.从资源(resource)读取

[cpp] view plaincopyprint?

  1. UIImage* image=[UIImage imageNamed:@"1.jpg"];  


2.从网络读取

[cpp] view plaincopyprint?

  1. NSURL *url=[NSURL URLWithString:@"http://www.sinaimg.cn/qc/photo_auto/chezhan/2012/50/00/15/80046_950.jpg"];  

  2. UIImage *imgFromUrl =[[UIImage alloc]initWithData:[NSData dataWithContentsOfURL:url]];  


3.从手机本地读取

[cpp] view plaincopyprint?

  1. //读取本地图片非resource  

  2. NSString *aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];  

  3. UIImage *imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3];  

  4. UIImageView* imageView3=[[UIImageView alloc]initWithImage:imgFromUrl3];  

4.从现有的context中获得图像

[cpp] view plaincopyprint?

  1. //add ImageIO.framework and #import     

  2. CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);  

  3. CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);  

  4. CGContextRef ctx=UIGraphicsGetCurrentContext();  

  5. CGContextSaveGState(ctx);  

  6. //transformCTM的2种方式  

  7. //CGContextConcatCTM(ctx, CGAffineTransformMakeScale(.2, -0.2));  

  8. //CGContextScaleCTM(ctx,1,-1);  

  9. //注意坐标要反下,用ctx来作为图片源   

  10. CGImageRef capture=CGBitmapContextCreateImage(ctx);  

  11. CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);  

  12. CGContextDrawImage(ctx, CGRectMake(160, 230, 160, 230), img);  

  13. CGImageRef capture2=CGBitmapContextCreateImage(ctx);  


5.用Quartz的CGImageSourceRef来读取图片

[cpp] view plaincopyprint?

  1. CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);  

  2. CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);  

二.保存图片

1.转换成NSData来保存图片(imgFromUrl是UIImage)

[cpp] view plaincopyprint?

  1. //保存图片 2种获取路径都可以  

  2. //NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  

  3. //NSString*documentsDirectory=[paths objectAtIndex:0];    

  4. //NSString*aPath=[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",@"test"]];   

  5. NSString *aPath=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];  

  6. NSData *imgData = UIImageJPEGRepresentation(imgFromUrl,0);      

  7. [imgData writeToFile:aPath atomically:YES];     


2.用Quartz的CGImageDestinationRef来输出图片,这个方式不常见,所以不做介绍,详细可以看apple文档Quartz 2D Programming Guide

三.绘制图(draw|painting)

1.UIImageView方式加入到UIView层

[cpp] view plaincopyprint?

  1. UIImageView* imageView=[[UIImageView alloc]initWithImage:image];  

  2. imageView.frame=CGRectMake(0, 0, 320, 480);  

  3. [self addSubview:imageView];  

  4. [imageView release];  

2.[img drawAtPoint]系列方法

[cpp] view plaincopyprint?

  1. [image4 drawAtPoint:CGPointMake(100, 0)];    

3.CGContextDrawImage

[cpp] view plaincopyprint?

  1. CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);  


4.CGLayer

这个是apple推荐的一种offscreen的绘制方法,相比bitmapContext更好,因为它似乎会利用iphone硬件(drawing-card)加速

[cpp] view plaincopyprint?

  1. CGLayerRef cg=CGLayerCreateWithContext(ctx, CGSizeMake(320, 480), NULL);  

  2. //需要将CGLayerContext来作为缓存context,这个是必须的  

  3. CGContextRef layerContext=CGLayerGetContext(cg);  

  4. CGContextDrawImage(layerContext, CGRectMake(160, 230, 160, 230), img);   

  5. CGContextDrawLayerAtPoint(ctx, CGPointMake(0, 0), cg);  


5.CALayer的contents

[cpp] view plaincopyprint?

  1. UIImage* image=[UIImage imageNamed:@"1.jpg"];  

  2. CALayer *ly=[CALayer layer];  

  3. ly.frame=CGRectMake(0, 0, 320, 460);  

  4. ly.contents=[image CGImage];  

  5. [self.layer addSublayer:ly];  



四.其它

1.CGImage和UIImage互换

这样就可以随时切换UIKit和Quartz之间类型,并且选择您熟悉的方式来处理图片.

CGImage cgImage=[uiImage CGImage];

UIImage* uiImage=[UIImage imageWithCGImage:cgImage];


本文转载自:

sfandy
粉丝 3
博文 21
码字总数 3368
作品 0
深圳
高级程序员
私信 提问
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0
ios中应用Lottie解决动画问题

作为一名iOS工程师,深知复杂动画的痛苦,下面我们来介绍下Lottie来解决日常的动画难题。 Lottie的简单介绍: 使用Lottie开发的流程是: 设计师在AE中设计完成你的动画,通过bodymoving插件导...

威廉云霄
02/20
0
0
iOS简单音乐实现、React-Native完整项目、仿闲鱼京东列表分页、语音识别、网络加载过度动画等源码

iOS精选源码 iOS快速入手语音识别、听写、评测、播报 网络加载数据的过渡动画(仿简书网页) iOS 封装跑马灯和轮播效果 crash防护组件,适用常见常用的数组,字典等crash保护 iOS:高仿闲鱼、...

Code4app
2018/09/26
0
0
react native之ios打包ipa

http://www.cocoachina.com/ios/20170511/19250.html http://reactnative.cn/post/3600 第一步:导出js bundle包和图片资源 先进入项目根目录release_ios文件夹 参数: --entry-file :ios或......

Chason-洪
2017/11/25
25
0
C++ Primer Plus(十七)——输入、输出和文件

cerr和clog对象与标准错误流对应,但cerr不被缓冲。 2. streambuf类为缓冲区提供了内存,并提供了用于填充缓冲区、访问缓冲区内容、刷新缓冲区和管理缓冲区内存的类方法。iosbase类表示流的一...

吃一堑消化不良
2017/11/04
26
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript权威指南笔记14

第14章、window对象 1、计时器 I-1 setTimeout()和setInterval()可在指定时间后调用 setTimeout()返回值可传递给clearTimeout()用于取消该函数的执行。 多久后执行。 setInterval()指定时间间...

_Somuns
16分钟前
0
0
python3.7安装教程

原创 python3.7安装教程 2018-09-18 21:10:56 PtaQ 阅读数 20628更多 分类专栏: python 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文...

_纵横捭阖_
28分钟前
2
0
windows使用docker运行mysql等工具(二)安装运行mysql

今天接着上一篇的内容继续来学习安装运行mysql。建议先阅读第一篇:windows安装docker 一 查看mysql版本 如果想知道mysql镜像具体有哪几个版本,需要去docker hub查看。 地址如下: https://...

执偕
38分钟前
2
0
IT兄弟连 HTML5教程 CSS3属性特效 文字排版

direction定义文字排列方式,所有浏览器都兼容这个属性,有两个可选值rtl和ltr。文字排版的参数说明如表1所示。 表1 CSS3文字排版参数说明 上表所示,ltr是初始值,表示left-to-right,就是从...

老码农的一亩三分地
38分钟前
1
0
做好一名linux运维工程师

如何做好一个合格的运工程师,运维工程师前景怎么样呢?就这些问题,与大家交流一下。首先对于运维工程师的要求是十分严苛的了,运维工程师不但要针对不同的问题做出响应,而且需要不断的补充...

问题终结者
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部