UIImagePickerController前置摄像头镜像

时间:2014-05-08 23:18:06

标签: ios7 camera uiimagepickercontroller front-camera

我有一个使用相机拍照的应用程序。我正在建立像名人自拍一样的东西。 使用前置摄像头,用户可以根据叠加照片进行调整并拍摄照片。

问题是前置摄像头图像被镜像了。所以现在图像与叠加图像不在同一个地方。

有没有办法在用户点击捕获按钮后镜像图像?

1 个答案:

答案 0 :(得分:1)

是的,您可以在用户单击捕获按钮后立即镜像图像。诀窍将是知道何时何时不去。或者知道你是否应该翻转你的叠加层。我认为你会想要翻转你的叠加层而不是图像。但是那部分是你理解的逻辑。这是我如何翻转图像:

- (void)imageTaken:(NSNotification*)notification
{
    UIImage *image = [[notification userInfo] objectForKey:UIImagePickerControllerOriginalImage];
    // determine if image needs to be flipped.  Maybe based on the size which tells you which camera was used.  Or maybe using the EXIF data.  That wasn't your question though so..
    bool imageNeedsFlipped = ... whatever your logic is
    if (imageNeedsFlipped) image = [self flipImageHorizontally:image];
    // then do your thing with your image..
}

- (UIImage *) flipImageHorizontally:(UIImage *)originalImage
{
    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:originalImage];
    UIGraphicsBeginImageContext(tempImageView.frame.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGAffineTransform flipHorizontal = CGAffineTransformMake(-1.0, 0.0, 0.0, 1.0, tempImageView.frame.size.height, 0.0);
    CGContextConcatCTM(context, flipHorizontal);

    [tempImageView.layer renderInContext:context];

    UIImage *flippedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return flippedImage;
}

但正如我在评论中所说。从控制器获取图像时,图像不会翻转。只有当您在屏幕上看到自己并且您正在使用前置摄像头时,它才会被翻转。做这个测试..打开相机并切换到前置摄像头..举起你的左手。屏幕显示你像一面镜子。屏幕左侧的手是举起的手。现在拍照并在图书馆中查看。右边的那只手就是那个举起来的手。保存照片时,它并没有翻转现实。当它预览给你时,它会翻转现实。

所以我真的认为你是以错误的方式接近它。叠加是需要翻转的,但只有当他们使用前置摄像头时才需要翻转。但这取决于您以及您希望应用程序如何运作。