2017-01-29 6 views
0

私はiOSの中に新しいですし、問題は私がAVFoundationを使用してイメージメタデータを取得する方法は?

を取った画像からメタデータを取得する必要があり、私は私がイメージ

// Take picture callback 
func capture(_ captureOutput: AVCapturePhotoOutput, 
      didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?, 
      previewPhotoSampleBuffer: CMSampleBuffer?, 
      resolvedSettings: AVCaptureResolvedPhotoSettings, 
      bracketSettings: AVCaptureBracketedStillImageSettings?, 
      error: Error?) { 

    if let error = error { 
     appDeligate.log.error("ERROR occure : \(error.localizedDescription)") 
    } 

    if let sampleBuffer = photoSampleBuffer, 
     let previewBuffer = previewPhotoSampleBuffer, 
     let dataImage = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: sampleBuffer, previewPhotoSampleBuffer: previewBuffer) { 

     appDeligate.log.debug("dataImage : \(UIImage(data: dataImage)!.size as Any)") 

     let dataProvider = CGDataProvider(data: dataImage as CFData)! 
     let cgImageRef: CGImage! = CGImage(jpegDataProviderSource: dataProvider, decode: nil, shouldInterpolate: true, intent: .defaultIntent) 
     let image = UIImage(cgImage: cgImageRef, scale: 1.0, orientation: UIImageOrientation.right) 

     saveImageAndData(image: image) 
    } else { 
     appDeligate.log.error("some ERROR here") 
    } 
} 

を取得する方法のコードがあるAVFoundation

を使用して、私のカスタムのカメラで作業です私はUIImagePickerControllerでメタデータを取得する方法を見つけましたが、同じことをする方法がありますAVFoundation

JavaではExifInterfaceを使用しています

final String [] tagProperties = {TAG_DATETIME, TAG_DATETIME_DIGITIZED, TAG_EXPOSURE_TIME, 
      TAG_FLASH, TAG_FOCAL_LENGTH, TAG_GPS_ALTITUDE, TAG_GPS_ALTITUDE_REF, TAG_GPS_DATESTAMP, 
      TAG_GPS_LATITUDE, TAG_GPS_LATITUDE_REF, TAG_GPS_LONGITUDE, TAG_GPS_LONGITUDE_REF, 
      TAG_GPS_PROCESSING_METHOD, TAG_GPS_TIMESTAMP, TAG_IMAGE_LENGTH, TAG_IMAGE_WIDTH, TAG_ISO, TAG_MAKE, 
      TAG_MODEL, TAG_ORIENTATION, TAG_SUBSEC_TIME, TAG_SUBSEC_TIME_DIG, TAG_SUBSEC_TIME_ORIG, TAG_WHITE_BALANCE, 
      TAG_FOCAL_LENGTH_IN_35MM_FILM, TAG_APERTURE_VALUE, TAG_BRIGHTNESS_VALUE, TAG_EXPOSURE_BIAS_VALUE, 
      TAG_EXPOSURE_INDEX, TAG_F_NUMBER, TAG_ISO_SPEED_RATINGS, TAG_LIGHT_SOURCE, TAG_SHUTTER_SPEED_VALUE, 
      TAG_SUBJECT_DISTANCE, TAG_SUBJECT_DISTANCE_RANGE}; 

Swift 3で同じようにするにはどうすればいいですか?

ありがとうございます! @Vimyは、最終的に私が出力

key : PixelWidth, value : 3264 
key : ColorModel, value : RGB 
key : PixelHeight, value : 2448 
key : {PNG}, value : { 
Chromaticities =  (
    "0.3127", 
    "0.329", 
    "0.64", 
    "0.33", 
    "0.3", 
    "0.6000000000000001", 
    "0.15", 
    "0.06" 
); 
Gamma = "0.45455"; 
InterlaceType = 0; 
sRGBIntent = 0; 
} 
key : ProfileName, value : sRGB IEC61966-2.1 
key : Depth, value : 8 
************ 
key : BrightnessValue, BRIGHT :: ** nil 
************ 

すべてのキーがありました答えに応じて

編集

- 画像をプロパティとして持っていることと値のペアを...

しかし、ドキュメントによれば、はるかに利用可能なプロパティがなければなりません。

https://developer.apple.com/reference/imageio/cgimageproperties/exif_dictionary_keys

どのように左のプロパティにアクセスできますか?

答えて

1

このヘルパー機能は、このトリックを行う必要があります。

func getEXIFFromImage(image:NSData) -> NSDictionary { 

    let imageSourceRef = CGImageSourceCreateWithData(image, nil); 

    let currentProperties = CGImageSourceCopyPropertiesAtIndex(imageSourceRef!, 0, nil) 

    let mutableDict = NSMutableDictionary(dictionary: currentProperties!) 

    return mutableDict 

} 

次に、CGImagePropertiesのキーを使用して、必要なメタデータにアクセスできます。 https://developer.apple.com/reference/imageio/cgimageproperties/exif_dictionary_keys

+0

もっとプロパティを取得する方法を教えてください。質問 –

+0

に説明を追加したことも 'import ImageIO'を追加することを忘れないでください –

関連する問題