UIImagePickerController - 将图片裁剪为正方形(在纵向模式下)

19

我正在使用UIImagePickerController来拍摄和编辑照片,在横向方向上运行良好,但在纵向方向上会将图片裁剪成一个正方形(不允许像在横向方向上那样将图像缩小以完全适应正方形裁剪区域)。有什么想法吗?

代码:

-(IBAction)initCamera:(id)sender{

//Init imagePicker instance
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setDelegate:self];

[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setShowsCameraControls:YES];
[imagePicker setAllowsEditing:YES];

[self presentModalViewController:imagePicker animated:YES];
[imagePicker release];
}
3个回答

12

可以使用GKImagePicker库,它允许设置自定义图像裁剪区域,如下所示:

self.imagePicker = [[GKImagePicker alloc] init];
self.imagePicker.cropSize = CGSizeMake(320, 90);
self.imagePicker.delegate = self;

[self presentModalViewController:self.imagePicker.imagePickerController animated:YES];

它不允许将相机设置为源类型。它只能与图库一起使用! - George
@George,它允许使用来自相册和相机的图像。 - Andrey Zverev
我更新了答案,包括设置sourceType的示例行。 - Josh Lehman
@JoshLehman 我也遇到了同样的问题,这个看起来很完美,但我不知道你是如何设置源代码的。 - Recycled Steel
1
@RecycledSteel 你应该使用 self.imagePicker.imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; - Bms270
当我添加GK库和图片时,它会给我报错。该怎么办? - ios

12
我很晚才回答这个问题,但是可能会有人发现这很有帮助。
更改
[imagePicker setAllowsEditing:YES]; 

To

[imagePicker setAllowsEditing:NO];

感谢您,Jay。

这只是禁用裁剪。想象一种使用情况,有人想上传全尺寸的肖像照片,但又想裁剪掉风景照片的某些部分。 - carbocation
@carbocation 是的,那可能是一个情况。但我想那是全新的功能,你可以通过检查UIImagePickerControllerdidFinishPickingImage:委托方法中图像的imageOrientation属性来管理它。 - Jay Pandya

4
你可以提供自定义的裁剪UI,但是无法仅更改标准裁剪框。这个链接可能会对此有所帮助。

1
谢谢。我只是想知道为什么裁剪横向照片可以正常工作(我可以将整个图像放入裁剪正方形中,因此不会丢失任何内容),但对于纵向照片却不行,因为它无法将图像适应正方形。 - cabhara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接