CGImageSource对图像数据读取任务的抽象
CGImageSource是对图像数据读取任务的抽象,通过它可以获得图像对象、缩略图、图像的属性(包括Exif信息)。
1.创建CGImageSourceRef
1
|
NSString *imagePath = [[NSBundle bundleForClass:self.class] pathForImageResource:@"test.png"];
|
2.获取图像
1
|
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
|
3.创建图像的缩略图
1
|
//缩略图的宽和高
|
4.获取图像的属性信息
1
|
CFDictionaryRef imageInfo = CGImageSourceCopyPropertiesAtIndex(imageSource, 0,NULL);
|
其中获取到的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:头像裁剪选择器McAvatarView
一个计算图片高度的类方法:
//获取网络图片的宽高
+ (CGSize)getImageSizeWithURL:(NSURL *)url {
// 1.创建CGImageSourceRef
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
CGFloat width = 0.0f, height = 0.0f;
if (imageSource)
{
// 获取图像的属性信息
CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
if (imageProperties != NULL)
{
CFNumberRef widthNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
if (widthNum != NULL) {
NSNumber *num = (__bridge NSNumber *)(widthNum);
width = [num floatValue];
// CFNumberGetValue(widthNum, kCFNumberFloatType, &width);
}
CFNumberRef heightNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
if (heightNum != NULL) {
NSNumber *num = (__bridge NSNumber *)(heightNum);
height = [num floatValue];
// CFNumberGetValue(heightNum, kCFNumberFloatType, &height);
}
CFRelease(imageProperties);
}
CFRelease(imageSource);
}
return CGSizeMake(width, height);
}