CGImageSource是对图像数据读取任务的抽象,通过它可以获得图像对象、缩略图、图像的属性(包括Exif信息)。
1.创建CGImageSourceRef
|
1
2 |
NSString
*imagePath = [[NSBundle
bundleForClass:self.class] pathForImageResource:@"test.png"];CGImageSourceRef
imageSource = CGImageSourceCreateWithURL((__bridge
CFURLRef)[NSURL
fileURLWithPath:imagePath],NULL); |
2.获取图像
|
1 |
CGImageRef
imageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL); |
3.创建图像的缩略图
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
//缩略图的宽和高double
thumbnailWidth=xxx,thumbnailHeight=xxx;//缩略图的信息的字典NSDictionary
*thumbnailInfo = @{(NSString
*)kCGImageSourceCreateThumbnailFromImageAlways : @YES,(NSString
*)kCGImageSourceThumbnailMaxPixelSize : [NSNumber
numberWithInt:MAX(thumbnailWidth,thumbnailHeight)],(NSString
*)kCGImageSourceCreateThumbnailWithTransform : @YES,};//得到缩略图CGImageRef
imageRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (__bridge
CFDictionaryRef)thumbnailInfo ); |
4.获取图像的属性信息
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
CFDictionaryRef
imageInfo = CGImageSourceCopyPropertiesAtIndex(imageSource, 0,NULL);//像素的宽NSNumber
*pixelWidthObj = (__bridge
NSNumber *)CFDictionaryGetValue(imageInfo, kCGImagePropertyPixelWidth);//像素的高NSNumber
*pixelHeightObj = (__bridge
NSNumber *)CFDictionaryGetValue(imageInfo, kCGImagePropertyPixelHeight);//图像的旋转方向NSInteger
orientation = [(__bridge
NSNumber *)CFDictionaryGetValue(imageInfo, kCGImagePropertyOrientation) integerValue];//Exif信息NSDictionary
*exifInfo = (__bridge
NSDictionary *)CFDictionaryGetValue(imageInfo, kCGImagePropertyExifAuxDictionary); |
其中获取到的kCGImagePropertyPixelHeight和kCGImagePropertyPixelHeight的数值是原始的值,也就是旋转之前的数值,所以要获取到显示图像的宽和高,需要对应kCGImagePropertyOrientation的值,而通过查看kCGImagePropertyOrientation的文档介绍,值分别从1-8,但其解释却让人看不懂,经过测试,得出与UIImageOrientation有以下的映射关系:
UIImageOrientationUp: 1
正常方向(默认值) 如图:![]()
UIImageOrientationDown: 3
旋转180度(朝左朝右当然是一样的) 如图:![]()
UIImageOrientationLeft: 8
向左逆时针旋转90度 如图:![]()
UIImageOrientationRight: 6
向右顺时针旋转90度 如图:![]()
UIImageOrientationUpMirrored: 2 将原图水平的翻转到背面
如图:![]()
UIImageOrientationDownMirrored: 4 在水平翻转之后再旋转180度
如图:![]()
UIImageOrientationLeftMirrored: 5
在水平翻转之后向左逆时针旋转90度 如图:![]()
UIImageOrientationRightMirrored: 7
在水平翻译之后向右顺时针旋转90度 如图:![]()
相关demo:
CGImageSource对图像数据读取任务的抽象,布布扣,bubuko.com
原文:http://www.cnblogs.com/xincc/p/3680833.html