ios – 根据UIView / CGRect的大小将图像裁剪成正方形

前端之家收集整理的这篇文章主要介绍了ios – 根据UIView / CGRect的大小将图像裁剪成正方形前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有AVCaptureSession的实现,我的目标是让用户拍摄照片,只将图像的一部分保存在红色方块边框内,如下图所示:

AVCaptureSession的previewLayer(相机)从(0,0)(左上角)跨越到我的相机控制栏(位于包含快门的视图的正上方)的底部.我的导航栏和控制栏是半透明的,所以相机可以显示.

我正在使用[captureSession setSessionPreset:AVCaptureSessionPresetPhoto];以确保保存到相机胶卷的原始图像与Apple的相机一样.

用户将能够以纵向,横向左右拍摄照片,因此裁剪方法必须考虑到这一点.

到目前为止,我已经尝试使用这段代码裁剪原始图像:

DDLogVerbose(@"%@: Image crop rect: (%f,%f,%f)",THIS_FILE,self.imageCropRect.origin.x,self.imageCropRect.origin.y,self.imageCropRect.size.width,self.imageCropRect.size.height);

// Create new image context (retina safe)
UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.imageCropRect.size.width,self.imageCropRect.size.width),NO,0.0);

// Create rect for image
CGRect rect = self.imageCropRect;

// Draw the image into the rect
[self.captureManager.stillImage drawInRect:rect];

// Saving the image,ending image context
UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext();

但是,当我看着相机胶卷中的裁剪图像时,似乎已经压缩了原始图像,并且不像我想要的那样丢弃图像的顶部和底部.它也导致“裁剪”图像顶部的53像素的空白,可能是因为我的CGRect的位置.

这是CGRect的日志输出

Image crop rect: (0.000000,53.000000,320.000000,322.000000)

这也描述了超视图中红色边框视图的框架.

有什么重要的我俯瞰吗?

附:原始图像尺寸(以纵向模式拍摄)为:

Original image size: (2448.000000,3264.000000)

解决方法

您可以使用CGImageCreateWithImageInRect裁剪图像:
CGImageRef imageRef = CGImageCreateWithImageInRect([uncroppedImage CGImage],bounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);

猜你在找的iOS相关文章