[英]how to detect if image from photo library was taken by iPhone camera or imported
[英]How to detect if photo taken from front camera
我想使用以下代碼垂直更改從前置攝像頭拍攝的照片的方向:
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 數據以找出哪個相機獲取它: Exif Data from Image
在 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")
}
}
您可以在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];
});
}
上面的片段輸出
iPhone 6 Plus 后置攝像頭 4.15mm f/2.2
您將不得不解析字符串的“前”或“后”部分。
依賴於解析從字符串中解析出來的東西會引發一些危險信號——可能有更好、更穩定的方法來做這件事。
從圖像中提取 EXIF 數據
Facetime相機:
"{Exif}" = {
ColorSpace = 65535;
PixelXDimension = 3088;
PixelYDimension = 2320;
};
主攝像頭:
"{Exif}" = {
ColorSpace = 65535;
PixelXDimension = 4032;
PixelYDimension = 3024;
};
使用此助手提取 EXIF 數據
extension UIImage {
func getExifData() -> CFDictionary? {
var exifData: CFDictionary? = nil
if let data = self.jpegData(compressionQuality: 1.0) {
data.withUnsafeBytes {
let bytes = $0.baseAddress?.assumingMemoryBound(to: UInt8.self)
if let cfData = CFDataCreate(kCFAllocatorDefault, bytes, data.count),
let source = CGImageSourceCreateWithData(cfData, nil) {
exifData = CGImageSourceCopyPropertiesAtIndex(source, 0, nil)
}
}
}
return exifData
}
}
來源: https ://stackoverflow.com/a/54230367/6576315
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.