通过ImageIO创建任意大小图片缩略图(image thumbnail)

创建图片缩略图有可以通过QuartzCore的UIGraphicsGetImageFromCurrentImageContext获取,这种方法需要提前计算好图片的长宽比。其实,ImageIO库提供了一个更为方便的方法,Apple的Documentation里甚至写好了一个方法:CGImageRef MyCreateThumbnailImageFromData (NSData * data, int imageSize)【可以通过搜索apple的文档找到】。不过,文档里的函数里写错了一个参数,以致无法取得thumbnailImage,函数返回的图片的大小始终是原始图片的大小。错误的地方是
 1 // Set up the thumbnail options.
 2    myKeys[0] = kCGImageSourceCreateThumbnailWithTransform;
 3    myValues[0] = (CFTypeRef)kCFBooleanTrue;
 4    myKeys[1] = kCGImageSourceCreateThumbnailFromImageIfAbsent;
 5    myValues[1] = (CFTypeRef)kCFBooleanTrue;
 6    myKeys[2] = kCGImageSourceThumbnailMaxPixelSize;
 7    myValues[2] = (CFTypeRef)thumbnailSize;
 8  
 9  myOptions = CFDictionaryCreate(NULL, (const void **) myKeys,
10                    (const void **) myValues, 2,
11                    &kCFTypeDictionaryKeyCallBacks,
12                    & kCFTypeDictionaryValueCallBacks);

 

改为3即可。kCGImageSourceThumbnailMaxPixelSize 是用来设置图片的长/宽像素最大尺寸的。可以为UIImage创建一个category,在其中增加方法


1 - (UIImage *) createThumbnailImageWithImageSize:(int) imageSize;
2 {
3     CGImageRef imagreRef = MyCreateThumbnailImageFromData(UIImagePNGRepresentation(self), imageSize);
4     return [UIImage imageWithCGImage:imagreRef];
5 }

 

 

posted @ 2013-03-08 23:29  xiaopangjun  阅读(1234)  评论(0编辑  收藏  举报