2017-03-10 8 views
0

question에서 언급 된 PHAsset에서 메타 데이터를 추출하려고합니다.PHAsset에서 추출 메타 데이터가 예기치 않은 nil 값을 반환합니다.

나는 FocalLength 또는 Aperture와 같은 메타 데이터를 추출하려고합니다. 나는 내 예를 들어, 이미지에 대한 다음과 같은 출력을 얻을 po fullImageMetadata 명령을 사용하면

let options = PHContentEditingInputRequestOptions() 
options.isNetworkAccessAllowed = true 

phAsset.requestContentEditingInput(with: options, completionHandler: {(contentEditingInput, _) -> Void in 

    let fullImage = CIImage(contentsOf: contentEditingInput!.fullSizeImageURL!) 
    let fullImageMetadata = fullImage?.properties 

    if let focalLength = fullImageMetadata?[kCGImagePropertyExifFocalLength as String] { 

     print(focalLength) 

    } 
}) 

이 : 다음 question에서 언급 한 바와 같이

▿ Optional<Dictionary<String, Any>> 
▿ some : 12 elements 
▿ 0 : 2 elements 
    - .0 : "PixelHeight" 
    - .1 : 2304 
▿ 1 : 2 elements 
    - .0 : "{JFIF}" 
    ▿ .1 : 4 elements 
    ▿ 0 : 2 elements 
     - .0 : DensityUnit 
     - .1 : 0 
    ▿ 1 : 2 elements 
     - .0 : YDensity 
     - .1 : 72 
    ▿ 2 : 2 elements 
     - .0 : JFIFVersion 
     ▿ .1 : 3 elements 
     - 0 : 1 
     - 1 : 0 
     - 2 : 1 
    ▿ 3 : 2 elements 
     - .0 : XDensity 
     - .1 : 72 
▿ 2 : 2 elements 
    - .0 : "{Exif}" 
    ▿ .1 : 14 elements 
    ▿ 0 : 2 elements 
     - .0 : DateTimeDigitized 
     - .1 : 2010:01:28 10:54:24 
    ▿ 1 : 2 elements 
     - .0 : ExposureProgram 
     - .1 : 1 
    ▿ 2 : 2 elements 
     - .0 : PixelXDimension 
     - .1 : 1536 
    ▿ 3 : 2 elements 
     - .0 : ExposureBiasValue 
     - .1 : 0 
    ▿ 4 : 2 elements 
     - .0 : Flash 
     - .1 : 16 
    ▿ 5 : 2 elements 
     - .0 : DateTimeOriginal 
     - .1 : 2010:01:28 10:54:24 
    ▿ 6 : 2 elements 
     - .0 : MeteringMode 
     - .1 : 3 
    ▿ 7 : 2 elements 
     - .0 : PixelYDimension 
     - .1 : 2304 
    ▿ 8 : 2 elements 
     - .0 : ISOSpeedRatings 
     ▿ .1 : 1 element 
     - 0 : 100 
    ▿ 9 : 2 elements 
     - .0 : ExposureTime 
     - .1 : 0.00625 
    ▿ 10 : 2 elements 
     - .0 : ApertureValue 
     - .1 : 5.375 
    ▿ 11 : 2 elements 
     - .0 : ColorSpace 
     - .1 : 1 
    ▿ 12 : 2 elements 
     - .0 : ExifVersion 
     ▿ .1 : 2 elements 
     - 0 : 2 
     - 1 : 2 
    ▿ 13 : 2 elements 
     - .0 : FocalLength 
     - .1 : 30 
▿ 3 : 2 elements 
    - .0 : "DPIWidth" 
    - .1 : 72 
▿ 4 : 2 elements 
    - .0 : "Depth" 
    - .1 : 8 
▿ 5 : 2 elements 
    - .0 : "ProfileName" 
    - .1 : sRGB IEC61966-2.1 
▿ 6 : 2 elements 
    - .0 : "Orientation" 
    - .1 : 1 
▿ 7 : 2 elements 
    - .0 : "{TIFF}" 
    ▿ .1 : 8 elements 
    ▿ 0 : 2 elements 
     - .0 : ResolutionUnit 
     - .1 : 2 
    ▿ 1 : 2 elements 
     - .0 : Software 
     - .1 : Adobe Photoshop CS3 Macintosh 
    ▿ 2 : 2 elements 
     - .0 : DateTime 
     - .1 : 2010:04:12 16:29:18 
    ▿ 3 : 2 elements 
     - .0 : XResolution 
     - .1 : 72 
    ▿ 4 : 2 elements 
     - .0 : Orientation 
     - .1 : 1 
    ▿ 5 : 2 elements 
     - .0 : YResolution 
     - .1 : 72 
    ▿ 6 : 2 elements 
     - .0 : Model 
     - .1 : Canon EOS 5D Mark II 
    ▿ 7 : 2 elements 
     - .0 : Make 
     - .1 : Canon 
▿ 8 : 2 elements 
    - .0 : "{IPTC}" 
    ▿ .1 : 4 elements 
    ▿ 0 : 2 elements 
     - .0 : DigitalCreationTime 
     - .1 : 105424+0100 
    ▿ 1 : 2 elements 
     - .0 : DigitalCreationDate 
     - .1 : 20100128 
    ▿ 2 : 2 elements 
     - .0 : DateCreated 
     - .1 : 20100128 
    ▿ 3 : 2 elements 
     - .0 : TimeCreated 
     - .1 : 105424+0100 
▿ 9 : 2 elements 
    - .0 : "ColorModel" 
    - .1 : RGB 
▿ 10 : 2 elements 
    - .0 : "DPIHeight" 
    - .1 : 72 
▿ 11 : 2 elements 
    - .0 : "PixelWidth" 
    - .1 : 1536 

을 내가 도달하려고 여기

내 현재 코드입니다 kCGImageProperty 값을 가진 메타 데이터입니다. 하지만 po fullImageMetadata?[kCGImageProperty[...] as String]으로 디버거에서 데이터를 인쇄 할 때 if -statement는 입력되지 않습니다. 반환 된 결과는 없습니다.

하지만 어떻게 든 작동해야합니까? 누구든지 내 실수를 보거나 그곳에서 무엇이 잘못되었는지 알 수 있습니까?

답변

0

kCGImageProperty 변수가있는 iOS의 예를 사용하여 문제를 해결할 수 없습니다. 대신 사전을 여러 부분으로 나누어서 해결했습니다.

내가 코드 줄 사용 예를 들어, EXIF ​​메타 데이터 활용하려면 다음

let exifDict = fullImageMetadata?["{Exif}"] as! NSDictionary 

을하고이 코드를 사용하여 속성 추출을 시도 : 다른 속성에 대한 등등

if let flash = exifDict["Flash"] as? NSNumber { 
    [doing some wild stuff here] 
} 

및 I 이미지에서 추출해야합니다.