- (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{
CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return cropped;
}
我正在使用此代码。请提供一些解决方案。谢谢提前
答案 0 :(得分:4)
CGImageCreateWithImageInRect
无法正确处理图像方向。
网上有许多奇怪而精彩的裁剪技术,包括巨型开关/案例陈述(参见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
参数的值。