这是来自 Alfons 的方法的更新版本,用于考虑屏幕比例,以及原始答案中未同步的评论中描述的图像大小浮点值中的小数点的一些愚蠢错误。
SCREEN_SCALE 是一个宏,如果未定义比例,则返回 1.0,或者无论设备比例实际是什么 ([UIScreen mainScreen].scale)。
- (UIImage *) normalize {
CGSize size = CGSizeMake(round(self.size.width*SCREEN_SCALE), round(self.size.height*SCREEN_SCALE));
CGColorSpaceRef genericColorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef thumbBitmapCtxt = CGBitmapContextCreate(NULL,
size.width,
size.height,
8, (4 * size.width),
genericColorSpace,
kCGImageAlphaPremultipliedFirst);
CGColorSpaceRelease(genericColorSpace);
CGContextSetInterpolationQuality(thumbBitmapCtxt, kCGInterpolationDefault);
CGRect destRect = CGRectMake(0, 0, size.width, size.height);
CGContextDrawImage(thumbBitmapCtxt, destRect, self.CGImage);
CGImageRef tmpThumbImage = CGBitmapContextCreateImage(thumbBitmapCtxt);
CGContextRelease(thumbBitmapCtxt);
UIImage *result = [UIImage imageWithCGImage:tmpThumbImage scale:SCREEN_SCALE orientation:UIImageOrientationUp];
CGImageRelease(tmpThumbImage);
return result;
}