创建图片缩略图有可以通过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 }