Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 在Swift 3/4中获取EXIF信息时出错_Image Processing_Swift3_Exif - Fatal编程技术网

Image processing 在Swift 3/4中获取EXIF信息时出错

Image processing 在Swift 3/4中获取EXIF信息时出错,image-processing,swift3,exif,Image Processing,Swift3,Exif,我想从照片库中的图像获取EXIF数据,但找不到正确的方法。我使用了和的答案。我将获得以下控制台输出: imageSource: <UIImage: 0x6080000b8a20> size {3000, 2002} orientation 0 scale 1.000000 2017-09-18 11:24:28.513567+0300 PhotoTest[10581:6526935] CGImageSourceCopyPropertiesAtIndex:3517: *** ERRO

我想从照片库中的图像获取EXIF数据,但找不到正确的方法。我使用了和的答案。我将获得以下控制台输出:

imageSource:  <UIImage: 0x6080000b8a20> size {3000, 2002} orientation 0 scale 1.000000
2017-09-18 11:24:28.513567+0300 PhotoTest[10581:6526935] CGImageSourceCopyPropertiesAtIndex:3517: *** ERROR: CGImageSourceCopyPropertiesAtIndex: source is not a CGImageSourceRef
2017-09-18 11:24:29.071412+0300 PhotoTest[10581:6527417] [discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}
您将看到:

*** ERROR: CGImageSourceCopyPropertiesAtIndex: source is not a CGImageSourceRef
行,因为您需要通过
CGImageSourceCreate…
API之一创建
imageSource

尝试这样做:

    if let bigImage = info[UIImagePickerControllerOriginalImage] as? UIImage
    {
        if let imageData = UIImagePNGRepresentation(bigImage)
        {
            if let imageSource = CGImageSourceCreateWithData(imageData as CFData, nil)
            {
                print("imageSource: ", imageSource)

                let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil)

                //print("imageProperties: ", imageProperties!)
                if let dict = imageProperties as? [String: Any] {
                    print(dict)
                }
            }
        }
    }

我找到了一个不同的解决方案,如下所示:

import Photos 
import PhotosUI

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        let assetURL = info[UIImagePickerControllerReferenceURL] as! NSURL
        let asset = PHAsset.fetchAssets(withALAssetURLs: [assetURL as URL], options: nil)
        guard let result = asset.firstObject else {
            return
        }

        let imageManager = PHImageManager.default()
        imageManager.requestImageData(for: result , options: nil, resultHandler:{
            (data, responseString, imageOriet, info) -> Void in
            let imageData: NSData = data! as NSData
            if let imageSource = CGImageSourceCreateWithData(imageData, nil) {
                let imageProperties2 = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil)! as NSDictionary
                print("imageProperties2: ", imageProperties2)
            }

        })
        dismiss(animated: true, completion: nil)
    }

希望这对其他人有帮助。

非常感谢。我正在得到一些我需要的东西。但是,我仍然看到这个控制台日志:`[discovery]在发现扩展时遇到错误:Error Domain=PlugInKit Code=13“query cancelled”UserInfo={NSLocalizedDescription=query cancelled}`这有可能是iOS11问题吗?看起来像是.Ok。。一个后续的。我只看到一张“彩色”的清单。我还需要做些什么来获取位置和相机信息吗?再次,非常感谢。好的,关于相机信息呢?虽然这段代码可能会回答这个问题,但提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。问题指出来源不是相机。此键仅在使用源类型设置为UIImagePickerController.SourceType.camera的图像选择器时有效,并且仅适用于静态图像
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let exifData = info[.mediaMetadata] as? [String: Any] {
        //print(exifData)
    }
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let exifData = info[.mediaMetadata] as? [String: Any] {
        //print(exifData)
    }
}