Ios 如何检测前摄像头拍摄的照片

Ios 如何检测前摄像头拍摄的照片,ios,swift,Ios,Swift,我想用以下代码更改从前摄像头垂直拍摄的照片的方向: let reversedImage = UIImage(CGImage: image.CGImage!, scale: 1.0, orientation: .LeftMirrored) 但是,我怎样才能检测到前摄像头拍摄的照片?我尝试了以下代码,但无效: let availableCameraDevices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)

我想用以下代码更改从前摄像头垂直拍摄的照片的方向:

let reversedImage = UIImage(CGImage: image.CGImage!, scale: 1.0, orientation: .LeftMirrored)
但是,我怎样才能检测到前摄像头拍摄的照片?我尝试了以下代码,但无效:

     let availableCameraDevices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
                for device in availableCameraDevices as! [AVCaptureDevice] {
                    if device.position == .Back {
                        let reversedImage = UIImage(CGImage: image.CGImage!, scale: 1.0, orientation: .LeftMirrored)

                        sp.pickedPhoto = reversedImage

                    }
                    else if device.position == .Front {
                        sp.pickedPhoto = image


                    }
                }

您的代码检查设备上是否有可用的摄像头。您需要做的是在拍摄完照片后读取图像的元数据,该元数据将包括相机上的信息


使用此解决方案读取图像附带的Exif数据,以找出是哪台相机获取的:

您可以在信息字典
UIImagePicker
中检查图像Exif数据,并将其传入回调

- (IBAction) handleTakePhoto:(UIButton *)sender {

    UIImagePickerController* picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    [self presentViewController:picker animated:YES completion:nil];

}

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    __block NSDictionary* metadata = [info objectForKey:UIImagePickerControllerMediaMetadata];

    dispatch_async(dispatch_get_main_queue(), ^{

        NSLog(@"%@", [metadata valueForKeyPath:@"{Exif}.LensModel"]);

        [picker dismissViewControllerAnimated:YES completion:nil];

    });

}
上面的代码段输出

iPhone6 Plus后置摄像头4.15mm f/2.2

您必须解析出字符串的“前面”或“后面”部分


依赖于解析从字符串中解析出来的内容会引起一些危险信号——可能有一种更好、更稳定的方法可以做到这一点。

在Swift中,您可以这样做:

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {

    self.dismissViewControllerAnimated(false, completion: { () -> Void in

    })

    if picker.cameraDevice == .Front
    {
        print("Image taken from front camera")
    }
    else if picker.cameraDevice == .Rear
    {
        print("Image taken from back camera")
    }
}
阿尔索