2015-08-08 3 views
6

Информация: Использование Swift и функция CGImageSourceCreateWithURL.Swift accesing EXIF ​​Dictionary

Я пытаюсь загрузить файл с URL-адреса, а затем отредактировать словарь, который имеет все данные с этой конкретной фотографии.

Это код из файла .swift. не

let url = NSURL(string: "http://jwphotographic.co.uk/Images/1.jpg") 
    let imageSource = CGImageSourceCreateWithURL(url, nil) 
    let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as Dictionary 

    println(imageProperties) 

    //this is an example 
    let aperture = imageProperties[kCGImagePropertyGPSLatitude] as! NSNumber! 

    /* 
    //these are all being defined as nil 
    //Load the ones from the exif data of the file 
    let lensUsed = imageProperties[kCGImagePropertyExifFocalLength] 
    let aperture = imageProperties[kCGImagePropertyExifApertureValue] as! 
    let isoSpeed = imageProperties[kCGImagePropertyExifISOSpeedRatings] as! NSNumber 
    let latitude = imageProperties[kCGImagePropertyGPSLatitude] as! NSNumber 
    let longitude = imageProperties[kCGImagePropertyGPSLongitude] as! NSNumber 
    let shutterSpeed = imageProperties[kCGImagePropertyExifShutterSpeedValue] as! NSNumber 
    let cameraName = imageProperties[kCGImagePropertyExifBodySerialNumber] as! NSNumber 
    */ 

    println(aperture) 

Даже если изображения свойства печатает все данные, как можно было бы ожидать, не-независимо от того, что я attmpted извлечь из словаря ImageProperties - это всегда возвращается как нуль - такие, как «отверстие» в примере. ImageProperties печатает как;

[{TIFF}: { 
    Artist = JOHN; 
    Copyright = "[email protected]"; 
    DateTime = "2015:07:31 21:07:05"; 
    Make = Canon; 
    Model = "Canon EOS 7D Mark II"; 
    ResolutionUnit = 2; 
    Software = "Adobe Photoshop Lightroom 6.0 (Macintosh)"; 
    XResolution = 72; 
    YResolution = 72; 
}, {IPTC}: { 
    Byline =  (
     JOHN 
    ); 
    CopyrightNotice = etc.. etc.. 

Я сделал много исследований и испытаний, и я просто не могу работать, что я делаю неправильно, чтобы получить доступ к элементам в этом словаре - Может кто-нибудь дать мне пример того, как я хотел бы установить переменную в качестве Элемент «Модель» внутри словаря?

Спасибо за любую помощь, Джон

ответ

6

Чтобы добраться до параметров Exif выполните следующие действия:

let filePath_ = "file:///Users/pfernandes/Documents/softwareDevelopment/PhotoLine/TestData/IMG_1243.JPG" 
    let fileURL = NSURL(string:filePath_) 
    let myImage = CGImageSourceCreateWithURL(fileURL!,nil) 

    let imageDict = CGImageSourceCopyPropertiesAtIndex(myImage!, 0, nil)! as NSDictionary; 
    let tiffModel_ = imageDict.value(forKey: "{TIFF}") 

    let cameraMake = (tiffModel_ as AnyObject).value(forKey: kCGImagePropertyTIFFMake as String) 
    let cameraModel = (tiffModel_ as AnyObject).value(forKey: kCGImagePropertyTIFFModel as String) 

    let exifDict_ = imageDict.value(forKey: "{Exif}") as! NSDictionary 
    let dateTimeOriginal = exifDict_.value(forKey:kCGImagePropertyExifDateTimeOriginal as String) as! NSString 
    let exposure   = exifDict_.value(forKey:kCGImagePropertyExifExposureTime as String) 

    print ("\(String(describing: cameraMake)) \(String(describing: cameraModel)) \(dateTimeOriginal) \(exposure!)") 
+0

Есть ли способ получить информацию о фото из библиотеки фотографий? Спасибо –

+1

Да, я отредактировал свой ответ, чтобы показать пример о том, как это сделать в последнем Swift/Xcode – Cortex

9

В Swift 3.0 я нашел следующее решение

let url = NSURL(string: "http://jwphotographic.co.uk/Images/1.jpg") 
let imageSource = CGImageSourceCreateWithURL(url, nil) 
let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as Dictionary? 
let exifDict = imageProperties?[kCGImagePropertyExifDictionary] 

Теперь вы можете получить доступ к exif-теги, например,

let dateTimeOriginal = exifDict?[kCGImagePropertyExifDateTimeOriginal] 
Swift.print("dateTimeOriginal: \(dateTimeOriginal)") 

Вы получите дополнительные значения, и вы должны проверить, есть ли значения или нет. Список доступных констант свойств смотрите на apple documentation.

Смежные вопросы