Ios 如何裁剪UIImagePickerController在显示时拍摄的照片

Ios 如何裁剪UIImagePickerController在显示时拍摄的照片,ios,objective-c,uiimagepickercontroller,crop,Ios,Objective C,Uiimagepickercontroller,Crop,当我使用UIImagePickerController拍照时,屏幕上的图片比我看到的要多。。。如何拍摄/裁剪它,使其与我在屏幕上看到的完全相同 编辑:我将添加代码,以指定我的问题: - (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType { UIImagePickerController *imagePickerController = [[UIImagePickerControlle

当我使用UIImagePickerController拍照时,屏幕上的图片比我看到的要多。。。如何拍摄/裁剪它,使其与我在屏幕上看到的完全相同

编辑:我将添加代码,以指定我的问题:

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType
{

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
imagePickerController.sourceType = sourceType;
imagePickerController.delegate = self;
imagePickerController.showsCameraControls = NO;
imagePickerController.allowsEditing = YES;

if (sourceType == UIImagePickerControllerSourceTypeCamera)
{
    [[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
    self.overlayView.frame = imagePickerController.cameraOverlayView.frame;
    imagePickerController.cameraOverlayView = self.overlayView;
    //self.overlayView = nil;
    self.overlayImage.image = self.imageView.image;
    self.overlayImage.alpha = 0.5;

    UISlider *slider=[[UISlider alloc]initWithFrame:CGRectMake(60, 80, 200, 30)];
    [slider setMaximumValue:1.0];
    [slider setMinimumValue:0.0];
    [slider setValue:0.5];
    [slider addTarget:self action:@selector(sliderChanged:)  forControlEvents:UIControlEventValueChanged];

    if (self.working == TRUE)
    {
        [imagePickerController.cameraOverlayView addSubview:self.overlayImage];
        [imagePickerController.cameraOverlayView addSubview:slider];
    }
}

self.imagePickerController = imagePickerController;
[self presentViewController:self.imagePickerController animated:YES completion:nil];
}
didFinishPickingMediaWithInfo:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissViewControllerAnimated:YES completion:NULL];

//this works, image is displayed
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
//this doesn't work, image is nil
UIImage *image = [info objecyForKey:UIImagePickerControllerEditedImage];    

[self.imageView setImage:image];
self.working = TRUE;

self.imagePickerController = nil;
//[self dismissViewControllerAnimated:YES completion:NULL];
}

imagePickerController.showsCameraControls=NO时,是否可以使用UIImagePickerControllerEditedImage

根据信息字典的键,您可以获取原始图像或裁剪图像

pickedImageEdited
将是您正在查找的裁剪图像,
pickedImageOriginal
将是完整的原始图像

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *pickedImageOriginal = [info objectForKey:UIImagePickerControllerOriginalImage];

    UIImage *pickedImageEdited = [info objectForKey:UIImagePickerControllerEditedImage];

    //do your stuff

    [self dismissViewControllerAnimated:YES completion:nil];
}

只是将此作为答案发布,但我不确定海报是否要求编辑图像

使用UIImagePickerController拍照时,picker仅显示拍照时实际拍摄的部分图像,如下图所示,其中黑线为iPhone屏幕

您从相机获得的图像是全尺寸图像,但屏幕上仅是图像的中心,图像的宽度或高度最大化为屏幕大小


你所需要做的就是从上面所示的图像中获取中心,然后你就可以在屏幕上获得准确的图像。

在Wim的回答之后,我能够想出这样的解决方案:

UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

UIGraphicsBeginImageContext(CGSizeMake(720, 960));
[image drawInRect: CGRectMake(0, 0, 720, 960)];
UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGRect cropRect = CGRectMake(40, 0, 640, 960);

CGImageRef imageRef = CGImageCreateWithImageInRect([smallImage CGImage], cropRect);
[self.imageView setImage:[UIImage imageWithCGImage:imageRef]];

如你所见,这是为3,5制作的“iPhone屏幕,它似乎可以工作,但代码依赖于设备,或者有更好的解决方案吗?

感谢您的回复,我已经尝试使用UIImagePickerControllerEditedImage,然后我会将其分配给UIImageView以便显示它,但由于某些原因,当显示该imageView时,应用程序崩溃。。。但是当我使用UIImagePickerControllerOriginalImage时,它工作正常。你有更多的崩溃信息吗?您是否将控制器的
允许编辑设置为
YES
?我在许多应用程序中使用此代码都没有任何问题。即使编辑的图像为
nil
,应用程序也不会崩溃,因此代码中的其他地方可能存在问题。allowsEditing设置为YES,UIImagePickerControllerEditedImage设置为nil在设置图像之前是否有可能关闭控制器?嗨,Wim,谢谢你的回答,这正是我想要的:)太好了,你应该把它标记为答案,这样其他人就可以找到它。嗯,根据设备调整大小。