CGImageSource


http://www.tanhao.me/pieces/1019.html

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      正常方向(默认值)   如图:UIImageOrientationUp

UIImageOrientationDown:           3       旋转180度(朝左朝右当然是一样的)    如图:UIImageOrientationDown

UIImageOrientationLeft:           8      向左逆时针旋转90度    如图:UIImageOrientationLeft

UIImageOrientationRight:          6      向右顺时针旋转90度    如图:UIImageOrientationRight

UIImageOrientationUpMirrored:     2      将原图水平的翻转到背面    如图:UIImageOrientationUpMirrored

UIImageOrientationDownMirrored:   4      在水平翻转之后再旋转180度    如图:UIImageOrientationDownMirrored

UIImageOrientationLeftMirrored:   5      在水平翻转之后向左逆时针旋转90度    如图:UIImageOrientationLeftMirrored

UIImageOrientationRightMirrored:  7      在水平翻译之后向右顺时针旋转90度    如图:UIImageOrientationRightMirrored

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值