iOS Custom UIImagePickerController Camera Crop to Square [英] iOS Custom UIImagePickerController Camera Crop to Square
问题描述
我正在尝试创建一个像Instagram这样的相机,用户可以在其中看到一个框,图像将裁剪到该框。由于某些原因,相机不会一直到达屏幕底部并在末端附近切断。我也想知道如何在该广场内将图像裁剪为320x320?
I'm trying to create a camera like Instagram where the user can see a box and the image would crop to that box. For Some reason the camera doesn't go all the way to the bottom of the screen and cuts off near the end. I'm also wondering how would I go about cropping the image to be 320x320 exactly inside that square?
推荐答案
这是最简单的方法(没有重新实现 UIImagePickerController
)。首先,使用叠加层使相机字段看起来是方形的。以下是3.5英寸屏幕的示例(您需要将其更新为适用于iPhone 5):
Here's the easiest way to do it (without reimplementing UIImagePickerController
). First, use an overlay to make the camera field look square. Here's an example for 3.5" screens (you'd need to update it to work for iPhone 5):
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = source;
if (source == UIImagePickerControllerSourceTypeCamera) {
//Create camera overlay
CGRect f = imagePickerController.view.bounds;
f.size.height -= imagePickerController.navigationBar.bounds.size.height;
CGFloat barHeight = (f.size.height - f.size.width) / 2;
UIGraphicsBeginImageContext(f.size);
[[UIColor colorWithWhite:0 alpha:.5] set];
UIRectFillUsingBlendMode(CGRectMake(0, 0, f.size.width, barHeight), kCGBlendModeNormal);
UIRectFillUsingBlendMode(CGRectMake(0, f.size.height - barHeight, f.size.width, barHeight), kCGBlendModeNormal);
UIImage *overlayImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *overlayIV = [[UIImageView alloc] initWithFrame:f];
overlayIV.image = overlayImage;
[imagePickerController.cameraOverlayView addSubview:overlayIV];
}
imagePickerController.delegate = self;
[self presentViewController:imagePickerController animated:YES completion:nil];
然后,从 UIImagePickerController $ c获取图片后$ c>,将其裁剪为正方形,如下所示:
Then, after you get a picture back from the UIImagePickerController
, crop it to a square with something like this:
//Crop the image to a square
CGSize imageSize = image.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
if (width != height) {
CGFloat newDimension = MIN(width, height);
CGFloat widthOffset = (width - newDimension) / 2;
CGFloat heightOffset = (height - newDimension) / 2;
UIGraphicsBeginImageContextWithOptions(CGSizeMake(newDimension, newDimension), NO, 0.);
[image drawAtPoint:CGPointMake(-widthOffset, -heightOffset)
blendMode:kCGBlendModeCopy
alpha:1.];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
你已经完成了。
这篇关于iOS Custom UIImagePickerController Camera Crop to Square的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!