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")
}
}
阿尔索