1

i am trying to overlaying an image with another image. I have tried this But, its not exactly gives the output what i am expecting. Let me explain it clearly through below image,

Image

Above is my ViewController where i am showing the Camera for taking the picture (Backgorund Image) using UIImagePickerController There is an Overlay Image i have placed. My overlay image can be rotate and zoom it :

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];
    }];
}

Once, the picture has been taken, i have overlaid the image with captured image through below code :

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
}

Code for scaleAndRotateImage

When, i tried these result for the image processing working weird. It gives below issues,

  • Captured image (Background Image) clarity has been lost.
  • Overlay image not placed exact point of the frame.
  • Frame of the overlay image changing and if its rotated not captured as rotated one.

Any, idea about my brief explanation with my code?


Update

Yeah, finally, i have achieved this and using AVCaptureSession to capture a Picture instead of using UIImagePickerController which would be an useful one. Now, the only thing is, My overlay image can be rotated though below one,

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;
}

I am not able to overlay the rotated the overlay image into another one. Not able to get the rotated image? How can i achieve this?

Community
  • 1
  • 1
Praveenkumar
  • 24,084
  • 23
  • 95
  • 173

0 Answers0