CGImageCreateWithImageInRect
无法正确处理图像方向。网上有许多奇怪而奇妙的裁剪技术,涉及巨大的 switch/case 语句(请参阅 Ayaz 答案中的链接),但是如果您停留在 UIKit 级别并且仅在UIImage
其自身上使用方法来进行绘图,那么所有细枝末节的细节都会为您处理好。
以下方法尽可能简单,并且适用于我遇到的所有情况:
- (UIImage *)imageByCropping:(UIImage *)image toRect:(CGRect)rect
{
if (UIGraphicsBeginImageContextWithOptions) {
UIGraphicsBeginImageContextWithOptions(rect.size,
/* opaque */ NO,
/* scaling factor */ 0.0);
} else {
UIGraphicsBeginImageContext(rect.size);
}
// stick to methods on UIImage so that orientation etc. are automatically
// dealt with for us
[image drawAtPoint:CGPointMake(-rect.origin.x, -rect.origin.y)];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}
opaque
如果您不需要透明度,您可能想要更改参数的值。