Ios7 UIImagePickerController前摄像头镜像

Ios7 UIImagePickerController前摄像头镜像,ios7,camera,uiimagepickercontroller,front-camera,Ios7,Camera,Uiimagepickercontroller,Front Camera,我有一个使用相机拍照的应用程序。我正在和一位名人进行自拍。 使用前置摄像头,用户可以根据叠加照片进行调整并拍照 问题是前置摄像头的图片会被镜像。因此,现在图像与覆盖图像不在同一位置 有没有办法在用户单击“捕获”按钮后镜像图像?是的,您可以在用户单击“捕获”按钮后立即镜像图像。诀窍在于知道什么时候该做,什么时候不该做。或者知道是否真的应该翻转覆盖层。我想你会想要翻转覆盖层,而不是图像。。但这部分是你要弄明白的逻辑。下面是我将如何翻转图像: - (void)imageTaken:(NSNotific

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

问题是前置摄像头的图片会被镜像。因此,现在图像与覆盖图像不在同一位置


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

是的,您可以在用户单击“捕获”按钮后立即镜像图像。诀窍在于知道什么时候该做,什么时候不该做。或者知道是否真的应该翻转覆盖层。我想你会想要翻转覆盖层,而不是图像。。但这部分是你要弄明白的逻辑。下面是我将如何翻转图像:

- (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;
}
但正如我在评论中所说的那样。从控制器获取图像时,图像不会翻转。只有当你在屏幕上看到自己并使用前摄像头时,它才会翻转。做这个测试。。打开摄像头并切换到前向摄像头。。举起你的左手。屏幕像一面镜子一样显示你。屏幕左侧的手是举起的手。现在拍下这张照片,在图书馆里看一看。右边的手现在是举起的那只。当它保存照片时,它不是翻转现实。当它向你预览它时,它正在翻转现实


所以,我真的认为你走错了路。覆盖层是需要翻转的,但只有在使用前置摄像头时才需要翻转。但这取决于你和你希望你的应用程序如何工作。

发布一些代码,有人可以为你指出正确的方向。现在我的答案是“是的,只是镜像一下”。使用相机和拍摄按钮有一个完整的过程。因此,在这个过程中的某个地方,你可以镜像图像,或者如果他们切换到前置摄像头,你可以镜像名人的照片。。鉴于该应用程序是一个自拍应用程序。。它被设计成使用前置摄像头。所以是的。。镜像名人照片将是一种选择。如果他们使用后摄像头,他们只会得到不想要的结果。我认为你应该问的真正问题是“我如何才能禁用后置摄像头,并强制他们只使用前摄像头?”我不想只强制前摄像头,后置摄像头也应该工作。该应用程序不是自拍应用程序,它只是其中一个功能。覆盖图还包括公司图标。。所以用户也可以拍摄其他东西的照片,然后答案就是“是”。用户单击“捕获”按钮后,可以镜像图像。我会给你一个真正的答案。谢谢!当前置摄像头打开时,我将尝试翻转覆盖图像。在这种情况下,问题是。。。1) 用户打开前向摄像头(覆盖图像翻转)2)用户单击“捕获”3)iOS显示预览模式在此预览模式下,摄像头图像翻转,但现在我的覆盖图像出错。因为我无法控制预览页面,所以我唯一的选择就是禁用控件并创建自己的控件。这意味着我必须实现iOS提供的几乎所有功能。。e、 (拍摄、取消、重拍、翻转相机、闪光灯)和预览页面。拍摄完照片后,我会进入一个预览视图,其中有一个接受/重拍按钮。在这个屏幕上,你也可以有一个翻牌覆盖。但是再一次。由于拍摄图像的大小,当你到达那里时,不难知道图像是前摄还是后摄。因此,检查大小或检查exif数据并覆盖适当翻转的覆盖。感谢badweasel,我建立了自己的相机视图和预览视图。我必须使用“取消”和“捕获”按钮为相机视图构建覆盖,然后当用户单击“捕获”时,我创建自己的预览页面并镜像原始图像。我还在预览页面上添加了“重拍”和“使用照片”链接。我将在github中创建一些东西来解决这个问题,因为我假设很多人都需要这个功能,但我没有找到任何简单的解决方案。谢谢你的评论,它帮助我考虑了其他可能的解决方案!!