iOS 读取图片的各种方法
Posted 成成先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 读取图片的各种方法相关的知识,希望对你有一定的参考价值。
一.读取图片
1.从资源(resource)读取 [cpp]- UIImage*
image=[UIImage imageNamed:@"1.jpg"];
2.从网络读取 [cpp]
- NSURL
*url=[NSURL URLWithString:@"http://attach.bbs.miui.com/forum/201203/20/170226n5qcwdpusnjdsswy.jpg"]; - UIImage
*imgFromUrl =[[UIImage alloc]initWithData:[NSData dataWithContentsOfURL:url]];
3.从手机本地读取 [cpp]
- //读取本地图片非resource
- NSString
*aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"]; - UIImage
*imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3]; - UIImageView*
imageView3=[[UIImageView alloc]initWithImage:imgFromUrl3];
4.从现有的context中获得图像 [cpp]
- //add
ImageIO.framework and #import - CGImageSourceRef
source = CGImageSourceCreateWithU RL((CFURLRef)url, NULL); - CGImageRef
img= CGImageSourceCreateImage AtIndex(source,0,NULL); - CGContextRef
ctx=UIGraphicsGetCurrentCont ext(); - CGContextSaveGState(ctx);
- //transformCTM的2种方式
- //CGContextConcatCTM(ctx,
CGAffineTransformMakeSca le(.2, -0.2)); - //CGContextScaleCTM(ctx,1,-1);
- //注意坐标要反下,用ctx来作为图片源
- CGImageRef
capture=CGBitmapContextCreateIma ge(ctx); - CGContextDrawImage(ctx,
CGRectMake(160, 0, 160, 230), [image CGImage]); - CGContextDrawImage(ctx,
CGRectMake(160, 230, 160, 230), img); - CGImageRef
capture2=CGBitmapContextCreateIma ge(ctx);
5.用Quartz的CGImageSourceRef来读取图片 [cpp]
- CGImageSourceRef
source = CGImageSourceCreateWithU RL((CFURLRef)url, NULL); - CGImageRef
img= CGImageSourceCreateImage AtIndex(source,0,NULL);
二.保存图片
1.转换成NSData来保存图片(imgFromUrl是UIImage) [cpp]- //保存图片
2种获取路径都可以 - //NSArray*paths=NSSearchPathForDirectori
esInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - //NSString*documentsDirectory=[paths
objectAtIndex:0]; - //NSString*aPath=[documentsDirectory
stringByAppendingPathCom ponent:[NSString stringWithFormat:@"%@.jpg",@"test"]]; - NSString
*aPath=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"]; - NSData
*imgData = UIImageJPEGRepresentatio n(imgFromUrl,0); - [imgData
writeToFile:aPath atomically:YES];
2.用Quartz的CGImageDestinationRef来输出图片,这个方式不常见,所以不做介绍,详细可以看apple文档Quartz 2D Programming Guide
三.绘制图(draw|painting)
1.UIImageView方式加入到UIView层 [cpp]- UIImageView*
imageView=[[UIImageView alloc]initWithImage:image]; - imageView.frame=CGRectMake(0,
0, 320, 480); - [self
addSubview:imageView]; - [imageView
release];
2.[img drawAtPoint]系列方法 [cpp]
- [image4
drawAtPoint:CGPointMake(100, 0)];
3.CGContextDrawImage [cpp]
- CGContextDrawImage(ctx,
CGRectMake(160, 0, 160, 230), [image CGImage]);
4.CGLayer 这个是apple推荐的一种offscreen的绘制方法,相比bitmapContext更好,因为它似乎会利用iphone硬件(drawing-card)加速 [cpp]
- CGLayerRef
cg=CGLayerCreateWithContext (ctx, CGSizeMake(320, 480), NULL); - //需要将CGLayerContext来作为缓存context,这个是必须的
- CGContextRef
layerContext=CGLayerGetContext(cg); - CGContextDrawImage(layerContext,
CGRectMake(160, 230, 160, 230), img); - CGContextDrawLayerAtPoin
t(ctx, CGPointMake(0, 0), cg);
5.CALayer的contents [cpp]
- UIImage*
image=[UIImage imageNamed:@"1.jpg"]; - CALayer
*ly=[CALayer layer]; - ly.frame=CGRectMake(0,
0, 320, 460); - ly.contents=[image
CGImage]; - [self.layer
addSublayer:ly];
四.其它
1.CGImage和UIImage互换 这样就可以随时切换UIKit和Quartz之间类型,并且选择您熟悉的方式来处理图片. CGImage cgImage=[uiImage CGImage]; UIImage* uiImage=[UIImage imageWithCGImage:cgImage];以上是关于iOS 读取图片的各种方法的主要内容,如果未能解决你的问题,请参考以下文章