我正在尝试用另一个图像覆盖一个图像。我已经尝试过了但是,它并没有完全给出我所期望的输出。让我通过下图清楚地解释它,
上面是我的 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
}
什么时候,我尝试了这些结果,因为图像处理工作很奇怪。它给出了以下问题,
- 捕获的图像
(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;
}
我无法将旋转的叠加图像叠加到另一个图像中。无法获得旋转后的图像?我怎样才能做到这一点?