所以我有一个想要裁剪的UIImage。我查看并找到了CIImage的imageByCroppingToRect
方法。因此,我将数据转换为CIImage而不是UIImage,使用指定的方法裁剪它,然后将生成的CIImage转换为UIImage,然后在UIImageView中显示它。
我的代码是
NSData *data = [[NSData alloc]initWithData:[def objectForKey:@"imageData"]];
//UIImage *normalImage = [[UIImage alloc]initWithData:data];
CIImage *originalImage = [CIImage imageWithData:data];
[originalImage imageByCroppingToRect:CGRectMake(10, 72, 300, 300)];
self.imageView.image = [UIImage imageWithCIImage:originalImage];
问题是图像旋转了90度,我不确定它是否被裁剪。使用设备的相机捕获此图像。我使用AVFoundation访问相机。我的会话预设为AVCaptureSessionPresetPhoto
。我想这就是我进行缩放的原因。
答案 0 :(得分:3)
CGRect rect = CGRectMake(10, 72, 300, 300);
CGImageRef imref = CGImageCreateWithImageInRect([yourOriginalImage CGImage], rect);
UIImage *newSubImage = [UIImage imageWithCGImage:imref];
试试这个。可以帮助你。
编辑:
首先修复图像方向: 参考:https://github.com/j3r3miah/mapmatic-ios/blob/master/Mapmatic/UIImage+FixOrientation.m
然后使用上面的代码将Image裁剪为指定的Rect。
答案 1 :(得分:1)
不是你的问题的答案,而是问题的答案
https://github.com/mbcharbonneau/UIImage-Categories
特别是此文件:https://github.com/mbcharbonneau/UIImage-Categories/blob/master/UIImage%2BResize.m
- (UIImage *)croppedImage:(CGRect)bounds {
CGFloat scale = MAX(self.scale, 1.0f);
CGRect scaledBounds = CGRectMake(bounds.origin.x * scale, bounds.origin.y * scale, bounds.size.width * scale, bounds.size.height * scale);
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], scaledBounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:UIImageOrientationUp];
CGImageRelease(imageRef);
return croppedImage;
}
您将找到裁剪图像所需的一切