【问题标题】:UIImage won't cropUIImage 不会裁剪
【发布时间】:2018-07-08 18:49:16
【问题描述】:

用户使用相机拍照 (UIImagePickerController)。但是,我无法裁剪它 - 或者我尝试了一下,它会返回完全相同的照片。

viewDidAppear我创建图像选择器控制器:

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
    ipc = [[UIImagePickerController alloc] init];
    ipc.delegate = self;

    ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
    ipc.showsCameraControls = NO;

    [[NSBundle mainBundle] loadNibNamed:@"SnapItCameraView" owner:self options:nil];
    self.overlayView.frame = ipc.cameraOverlayView.frame;
    ipc.cameraOverlayView = self.overlayView;
    self.overlayView = nil;
    CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 71.0); 
    ipc.cameraViewTransform = translate;
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenHeight = screenRect.size.height;
    CGFloat scaleCamera = screenHeight / 426;

    CGAffineTransform scale = CGAffineTransformScale(translate, scaleCamera, scaleCamera);
    ipc.cameraViewTransform = scale;
    ipc.showsCameraControls = NO;
    ipc.tabBarController.tabBar.hidden = YES;
    ipc.allowsEditing = YES;
    [ipc setAllowsEditing:YES];

    [self presentViewController:ipc animated:YES completion:nil];
}

didFinishPickingMediaWithInfo

UIImage* theImage = [info objectForKey:UIImagePickerControllerOriginalImage];
UIImageWriteToSavedPhotosAlbum(theImage, nil, nil, nil);             
[self ordinaryCrop:theImage toRect:CGRectMake(20, 0, 250, 250)];
UIImageWriteToSavedPhotosAlbum(theImage, nil, nil, nil);

裁剪:

-(UIImage *)ordinaryCrop:(UIImage *)imageToCrop toRect:(CGRect)cropRect
{
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], cropRect);
    UIImage *cropped = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return cropped;
}

但图像在裁剪后完全一样。我尝试了解决方案in this post,但是 UIImage* theImage = [info objectForKey:UIImagePickerControllerEditedImage]; 返回零

It's different from [this post][2] because, as the bounty answer points out, 

“如果选择图像,AllowsEditing 属性仅允许用户裁剪为正方形。”用户没有选择图像,我也没有尝试专门裁剪为正方形。我正在尝试裁剪它。

【问题讨论】:

标签: ios objective-c uiimage uiimagepickercontroller


【解决方案1】:

您从您的ordinaryCrop 函数返回cropped,但您在didFinishPickingMediaWithInfo 中没有对其进行任何操作,您只需再次保存原始图像。

你想要的是:

UIImage* theImage = [info objectForKey:UIImagePickerControllerOriginalImage];
UIImageWriteToSavedPhotosAlbum(theImage, nil, nil, nil);             
UIImage *croppedImage = [self ordinaryCrop:theImage toRect:CGRectMake(20, 0, 250, 250)];
UIImageWriteToSavedPhotosAlbum(croppedImage, nil, nil, nil);

【讨论】:

    【解决方案2】:

    拿一个 UIButton 试试这个:

    1.

     UIButton *addImage_Button;
    

    2.

    -(IBAction)addImage_Button:(id)sender
    {
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;
        picker.allowsEditing = YES; //THIS IS FOR CROPPING
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        [self presentViewController:picker animated:YES completion:NULL];
    }
    

    3.

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        UIImage *chosenUserImage = info[UIImagePickerControllerEditedImage];
        chosenUserImage = [chosenUserImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        addImage_Button.imageView.contentMode = UIViewContentModeScaleAspectFill;
        [addImage_Button setImage:chosenUserImage forState:UIControlStateNormal];
        [picker dismissViewControllerAnimated:YES completion:NULL];
    
    }
    

    4.

    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
    {
        [picker dismissViewControllerAnimated:YES completion:NULL];
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-14
      • 1970-01-01
      • 2015-06-30
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多