2

所以我有一个要裁剪的 UIImage 。我查看并找到imageByCroppingToRect了 CIImage 的方法。因此,我将数据转换为 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. 我认为这就是我得到缩放的原因。

4

2 回答 2

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

然后使用上面的代码将图像裁剪为指定的矩形。

于 2013-10-14T09:26:53.377 回答
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;
}

您会在那里找到裁剪图像所需的一切

于 2013-10-14T11:16:58.747 回答