1

我正在尝试用另一个图像覆盖一个图像。我已经尝试过但是,它并没有完全给出我所期望的输出。让我通过下图清楚地解释它,

图片

上面是我的 ViewController,我在其中显示用于拍照的相机(Backgorund Image),使用UIImagePickerController的是我放置的叠加图像。我的叠加图像可以旋转和缩放:

if ([self isCameraAvailable] && [self doesCameraSupportTakingPhotos]) {
    cameraPicker = [[UIImagePickerController alloc] init];
    cameraPicker.delegate = self;
    cameraPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    NSMutableArray *mediaTypes = [[NSMutableArray alloc] init];
    [mediaTypes addObject:(__bridge NSString *)kUTTypeImage];
    cameraPicker.mediaTypes = mediaTypes;
    cameraPicker.showsCameraControls = NO;
    cameraPicker.navigationBarHidden = YES;
    cameraPicker.toolbarHidden = YES;
    cameraPicker.delegate = self;
    cameraPicker.allowsEditing = NO;

    [self presentViewController:cameraPicker animated:YES completion:^{
        overLayCustomView.hidden = NO;
        [cameraPicker.view addSubview:overLayCustomView];
    }];
}

拍摄完照片后,我通过以下代码将图像与捕获的图像重叠:

NSString *mediaType = info[UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
    UIImage *image = [self scaleAndRotateImage:[info objectForKey:UIImagePickerControllerOriginalImage]];

    UIGraphicsBeginImageContextWithOptions(image.size, FALSE, 0.0);
    [image drawInRect:CGRectMake( 0, 0, image.size.width, image.size.height)];
    [renderedImage.image drawInRect:CGRectMake( renderedImage.frame.origin.x, renderedImage.frame.origin.y, renderedImage.frame.size.width, renderedImage.frame.size.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);
    UIGraphicsEndImageContext();

    [picker dismissViewControllerAnimated:YES completion:^{

        [self performSegueWithIdentifier:@"previewPage" sender:newImage];
    }];
}
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) {
    // Code here to support video if enabled
}

代码scaleAndRotateImage

什么时候,我尝试了这些结果,因为图像处理工作很奇怪。它给出了以下问题,

  • 捕获的图像(Background Image)清晰度已丢失。
  • 覆盖图像未放置在框架的确切点。
  • 覆盖图像的帧发生变化,如果其旋转未捕获为已旋转图像。

关于我对代码的简要解释的任何想法?


更新

是的,最后,我已经实现了这一点,并使用它AVCaptureSession来捕获图片,而不是使用UIImagePickerController有用的图片。现在,唯一的事情是,我的叠加图像可以旋转,虽然低于一个,

UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)];
[rotationRecognizer setDelegate:self];
[self.overLayImage addGestureRecognizer:rotationRecognizer];


- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer {
    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
    recognizer.rotation = 0;
}

我无法将旋转的叠加图像叠加到另一个图像中。无法获得旋转后的图像?我怎样才能做到这一点?

4

0 回答 0