Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2604625
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5920
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: iOS平台

2015-11-15 18:24:27


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

相关的Demo:


阅读(885) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~