Как читать данные exif из UIImage в swift 4? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть изображение с большим количеством exif информации .Но при попытке прочитать информацию exif с помощью swift, он показывает ограниченное количество информации exif.

Я попробовал следующий код:

let data = UIImageJPEGRepresentation(image, 1.0)
    let source = CGImageSourceCreateWithData(data! as CFData, nil)
    let metadata = (CGImageSourceCopyPropertiesAtIndex(source!, 0, nil))
    debugPrint(metadata ?? "nil")

И он печатает следующий результат:

{
ColorModel = RGB;
Depth = 8;
Orientation = 6;
PixelHeight = 2448;
PixelWidth = 3264;
ProfileName = "sRGB IEC61966-2.1";
"{Exif}" =     {
    ColorSpace = 1;
    PixelXDimension = 3264;
    PixelYDimension = 2448;
};
"{JFIF}" =     {
    DensityUnit = 0;
    JFIFVersion =         (
        1,
        0,
        1
    );
    XDensity = 72;
    YDensity = 72;
};
"{TIFF}" =     {
    Orientation = 6;
};

}

Как я могу прочитать всеexif информация из UIImage?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Я подозреваю, что UIImageJPEGRepresentation функция является виновником, поскольку она выполняет преобразование из HEIC в JPEG (при условии, что вы извлекаете изображения из приложения Photos).Многие ценные теги Exif, в том числе такие, как географическое положение, похоже, теряются во время этого преобразования.

0 голосов
/ 26 октября 2018

, если ваше изображение захвачено с использованием avcapturesession.than код для извлечения exif данных.

photoFileOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {(sampleBuffer, error) in
                if (sampleBuffer != nil) {
                        let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer!)
                        let image = self.processPhoto(imageData!)
                        let source: CGImageSource = CGImageSourceCreateWithData((imageData as! CFMutableData), nil)!

                        let metadata = CGImageSourceCopyPropertiesAtIndex(source, 0,nil) as! [String:Any]

                        print("exif data = \(metadata![kCGImagePropertyExifDictionary as String] as? [String : AnyObject]) ")

                        completionHandler(true)
                    } else {
                        completionHandler(false)
                    }
                }
...