Swift

Swift:EXIFを書き換え

第一段階として、GPS辞書の変換・削除・差し替え、EXIFを書き換えができるようになりました。

ちょっとしたことなのですが、時間がかかってしまいました。いろいろ調べたのですが、残念なことに決め手になるものを見つけられませんでした。

NSDictionaryとDictionaryの相互変換

いくつか重要なことがあると思われますので、メモします。

  • NSDictionaryはwDicGPS[kCGImagePropertyGPSLatitude] = wGPS.pLatiのような書き方で簡単に値の変更ができません。一方、EXIF辞書はNSDictionaryでないと読み込み・書き込みができないようです。それでNSDictionaryにEXIFを読み込み → Dictionary & 値の設定・変更 → NSDictionary → 書き込みという手順を踏まえたら、EXIFの書き換えができました。

var mm_EXIF:NSDictionary  = NSDictionary()
var mm_GPS:NSDictionary = NSDictionary()

  • それで、一旦、Dictionaryに変換してから値をセットし、そのあとでNSDictionaryに戻せばうまくことがわかりました。
  • NSDictionaryへの読み込み

mm_EXIF = CGImageSourceCopyPropertiesAtIndex (wimageRef, 0, nil)
mm_GPS  = mm_EXIF.objectForKey (kCGImagePropertyGPSDictionary) as! NSDictionary

  • Dictionaryへの変換 ワーク用のDictionaryをグローバル変数で定義するとエラーが発生します。

var wDicEXIF:Dictionary = mm_EXIF   as Dictionary
var wDicGPS:Dictionary  = mm_GPS

  • Dictionaryに値を設定

wDicGPS[kCGImagePropertyGPSLatitude]  = wGPS.pLati//緯度

  • 書き換えするためにNSDictionaryに再変換

wDicEXIF.removeValueForKey (kCGImagePropertyGPSDictionary)//GPS削除
wDicEXIF[kCGImagePropertyGPSDictionary] = wDicGPS//GPS追加
mm_EXIF = wDicEXIF//NSDictionaryに再変換

このあと、jpgファイルといっしょにmm_EXIFを書き込めばEXIFの更新ができます。

参考:NSArrayやNSDictionaryを、SwiftのArrayやDictionaryと相互変換

Categories: Swift, 技術