Day: April 20, 2015

Swift:EXIF表示のサンプルプログラムの開発に着手5

EXIFとGPSがNSDictionaryの形式であることは早目にわかったのですが、ログが頭に貼り付いて、値がバイナリや数値かもしれないということまで頭がまわりませんでした。

それで日付・時刻がなぜOptional(2015:04:18 13:04:03)で入っているのか。2015:04:18 13:04:03だけ取り出すにはどうすればいいだろうか。そんなことを考えていました。それでキーの値だけを取り出すメソッドを作ってしまいました。

var date: AnyObject? = exif?.objectForKey(kCGImagePropertyExifDateTimeOriginal)
println(“date=\(date)”) //Optional(2015:04:18 13:04:03)

しかし、そのあとで、はたと思ったのです。

gps = imageDict.objectForKey(kCGImagePropertyGPSDictionary) //GPS辞書
var wLatitude:Int   =   gps?.objectForKey(kCGImagePropertyGPSLatitude) as! Int //
println(“wLatitude=\(wLatitude)”)

この整数の指定はまずいとしても、文字で入っているはずないですよね。結局、次の変換方法に戻ってきました。

度 = int(139.759774167) = 139
分 = int(0.759774167 * 60) = int(45.58645002) = 45

秒 = int(0.58645002 * 60 *1000) / 1000 = 35.187

139°45′35.187″
= 139 + (45 / 60) + (35.187 / 60 / 60)

= 139.759774167

参照:経度・緯度を60進法から10進法へ変換
 

Swift:EXIF表示のサンプルプログラムの開発に着手4

緯度・経度の変換の仕方について調べていたのですが、その前に読み込んだ画像ファイルの属性全体をリストしておいた方がよいことに気づきました。

これは単にdictionaryのログです。ここに設定されている値を抽出したり、編集したりすることになります。もっとも、現時点では「そのはず」です。

以前、辞書の値を取り出して修正するサンプルプログラムを作成したはずなので、その応用ということになります。これも「そのはず」。

元々、出来が良くないのですが、しばらくプログラム開発から遠ざかっていたのでさらに頭が回転しません。自分がよくわかっていないことがわかります。余計な動きが多い。やれやれ。

imageDict={
ColorModel = RGB;
DPIHeight = 72;
DPIWidth = 72;
Depth = 8;
Orientation = 1;
PixelHeight = 2592;
PixelWidth = 4608;
ProfileName = “sRGB IEC61966-2.1”;
“{Exif}” =     {
ApertureValue = “3.6”;
BrightnessValue = “7.82”;
ColorSpace = 1;
ComponentsConfiguration =         (
1,
2,
3,
0
);
CompressedBitsPerPixel = “3.2”;
CustomRendered = 0;
DateTimeDigitized = “2015:04:18 13:04:03”;
DateTimeOriginal = “2015:04:18 13:04:03”;
ExifVersion =         (
2,
3
);
ExposureBiasValue = 0;
ExposureMode = 0;
ExposureProgram = 8;
ExposureTime = “0.001470588235294118”;
FNumber = “3.5”;
FileSource = 3;
Flash = 16;
FlashPixVersion =         (
1,
0
);
FocalLength = “4.6”;
FocalPlaneResolutionUnit = 3;
FocalPlaneXResolution = 7166;
FocalPlaneYResolution = 7166;
ISOSpeedRatings =         (
100
);
LightSource = 0;
MaxApertureValue = “3.6”;
MeteringMode = 5;
PixelXDimension = 4608;
PixelYDimension = 2592;
SceneCaptureType = 1;
SceneType = 1;
SensingMethod = 2;
SensitivityType = 1;
Sharpness = 0;
ShutterSpeedValue = “9.48”;
SubjectDistRange = 0;
WhiteBalance = 0;
};
“{GPS}” =     {
Altitude = 17;
AltitudeRef = 0;
DOP = “1.25”;
DateStamp = “2015:04:18”;
GPSVersion =         (
2,
3,
0,
0
);
ImgDirection = “199.71”;
ImgDirectionRef = T;
Latitude = “33.55751166666667”;
LatitudeRef = N;
Longitude = “130.202605”;
LongitudeRef = E;
MapDatum = “WGS-84”;
MeasureMode = 3;
Satellites = 8;
Speed = “0.04”;
SpeedRef = K;
Status = A;
TimeStamp = “04:03:48”;
};
“{IPTC}” =     {
“Caption/Abstract” = “I am too tied “;
CopyrightNotice = ”    “;
DateCreated = 20150418;
DigitalCreationDate = 20150418;
DigitalCreationTime = 130403;
ObjectName = “\Ud83d\Udd344/18 Dahlia \U30c0\U30ea\U30a2\Ud83d\Udd34”;
TimeCreated = 130403;
};
“{JFIF}” =     {
DensityUnit = 1;
JFIFVersion =         (
1,
0,
1
);
XDensity = 72;
YDensity = 72;
};
  “{TIFF}” =     {
Copyright = ”    “;
DateTime = “2015:04:18 13:04:03”;
ImageDescription = “I am too tied “;
Make = FUJIFILM;
Model = “FinePix F770EXR”;
Orientation = 1;
ResolutionUnit = 2;
Software = “Photos 1.0”;
XResolution = 72;
YResolution = 72;
};
}