C#(.NET)でJPEGファイルのExifを読み取る方法
C#から、Exifを利用するアプリケーションを作るために、Exifについて少々調べました。
Exif についての資料
基本的に、Exifについて知りたいのなら、Exif.orgのExif 2.1のpdfファイルや、TIFF 6のpdfファイルが役に立ちます。特に、Exif 2.1 の仕様書であるExif2-1.pdfを見るのがよいでしょう(もちろん、新しい方のExif 2.2でもいいです)。
当然のように英語なので、見るのがめんどくさいかもしれないですが、注目すべきは、Exif2-1.pdfで言えば、p.24の、フィールドと呼ばれる項目がどのような要素から成り立っているかを示しているページと、p.131の、Exifの例と、p.158の、単位変換(APEX)のページが役に立ちます。
C#からExifを取得する方法の基礎
さて、実際に、一番基本となるとっかかりを紹介します。とっかかりと言っても、仕様書をどのように見ればいいのかをちょっと意識したとっかかりを書いてみます。
具体的に行いたいのは、C#で簡単に取得できる項目を片っ端から取得して、表示してみることです。
サンプルコード
まず、JPEGファイルを、Bitmapオブジェクトとして読み込みます。System.Drawingを参照に加えて、
using System.Drawing;
...
Bitmap bitmap = new Bitmap(@"c:\IMG_0001.JPG");
とすればOK。
つぎに、Exifの項目(フィールド)の詰まった配列を取り出します。
using System.Drawing.Imaging;
...
PropertyItem[] props = bitmap.PropertyItems;
そして、中身をすべて表示してみます。
for (int i = 0; i < props.Length; i++)
{
PropertyItem p = props[i];
Console.Out.WriteLine(p.Id + "," + p.Len + "," + p.Type + "," + p.Value);
}
このようにすることで、
271,6,2,System.Byte[]
272,14,2,System.Byte[]
・・・
のように出力されます。
出力結果の見方
出力のうちの、最初の行、
271,6,2,System.Byte[]
について考察してみます。これを見ると、
Id=271
Len=6
Type=2
Value=System.Byte[]
ということになりますが、System.Byte[]は、型を表しているだけなので、内容を調べてみると、バイト配列が記録されていることが分かります。手元のファイルでは、{67,97,110,111,110,0}となっていました。
ここで、Id、Len、Type、Valueそれぞれについて考察します。
Id
Idは、Exif2-1.pdf の p.24における、Tagに相当します。今回は、Id=271なので、このpdf中を、271で検索すると、以下のような情報が手に入ります。
Make
The manufacturer of the recording equipment. This is the manufacturer of the DSC, scanner, video digitizer or other equipment that generated the image. When the field is left blank, it is treated as unknown.
Tag = 271 (10F.H)
Type = ASCII
Count = Any
Default = none
つまり、この項目は、カメラメーカーを指すと言うことが分かります。
Len
Lenは、ValueのByte配列の長さです。今回は6なので、Valueが6byte分あることになります。
Type
Typeは、先ほどのExif2-1.pdfのp.24のTypeと同じです。ここでは、2なので、ASCII型ということになります。つまり、Valueは文字列です。
Value
TypeがASCIIだとわかっているので、Valueのバイト配列{67,97,110,111,110,0}を最後の0をヌル文字だとおもって変換してみると、Canonとなります。
項目の内容
つまり、以上から、この項目は、カメラメーカーがキヤノンであることを表していたことが分かります。
まとめ
とりあえず、とっかかりがつかめたと思います。ほかの項目についても、同様に考えれば、Exifの内容を次々読み取れるはずです。
PCのGoogleマップで作ったマイマップを携帯のGoogleマップで表示する方法
パソコンで作成したGoogleマップのマイマップを、携帯上で表示させる方法をメモしておきます。
前置き
2009年09月現在、Googleマップでマイマップを作成する際、一般公開と限定公開(URLで共有)が選べますが、私は限定公開にして、実質非公開にします(URLを誰にも教えないということ)。
実は、携帯版GoogleマップであるモバイルGoogleマップから、公開されているたくさんのマイマップを検索することはできるようなのですが、限定公開にすると、その対象にはならないようです。
今回は、限定公開にしたときに、もしくは、限定公開でなくても、ずばりこのマイマップが見たい!というときに、どのように携帯から見ればいいかをメモします。
0.モバイルGoogleマップを使う際の心構え
モバイルGoogleマップの通信量は莫大です。ですから、必ずパケほーだい的なプランにしましょう。とんでもない請求が来かねないです。また、電池の消耗が激しいので、気をつけてください。
1.モバイルGoogleマップをインストールする
当たり前ですが、モバイルGoogleマップをインストールします。i modeの場合は、i メニューから「Googleマップ」で検索してGoogleマップのホームページに辿り着けば、簡単にインストールできます。
2.マイマップのアドレスを調べる
作成済みのマイマップを表示すると、右上にリンクというボタンがあり、そのボタンを押すと、「このリンクをメールに貼り付けて地図を共有できます」という表示とともに、アドレスが表示されます。そのアドレスがそのマイマップのアドレスです。メモ帳か何かにコピーしましょう。
3.アドレスを書き加えて、kmlを出力するように変更する
このアドレスを直接携帯から開いても、うまくいきません。そこで、まず、このアドレスに手を加えます。
アドレスは、たとえば
http://maps.google.co.jp/maps/ms?ie=UTF8&hl=ja&msa=??&msid=??????&z=15
などとなっていると思いますが、この末尾に「&output=kml」を追加して、
http://maps.google.co.jp/maps/ms?ie=UTF8&hl=ja&msa=??&msid=??????&z=15&output=kml
としてください。このアドレスをこれ以降利用します。(例とアドレスがだいぶ違ったりすることもありますが、とりあえず&output=kmlを追加すればいいはずです)
4.アドレスを携帯に送る
前のステップで作成したアドレスを、携帯に送ってください。PCからメールで送るのがお手軽ですかね。
5.携帯で、アドレスをコピーする
携帯に送られてきたアドレスは、モバイルGoogleマップ上で使用します。そのとき、貼り付けたいので、アドレスをコピーしてください。
6.モバイルGoogleマップで検索する
モバイルGoogleマップを起動して、検索を行います。検索キーワードを入力する時に、コピーしておいたアドレスを貼り付けてください。そして、アドレスで検索すると、kmlを読み込んで、マイマップが表示されます。めでたしめでたし。
7.終わりに
ちゃんと表示されましたかね?Googleマップがいっそう便利に使えると思います。もっとやりやすいやり方があればいいのですが、とりあえず、そんなにたくさんマイマップを作っている訳じゃないので、これでOKということにします。
さて、こんなことはいいとして、プログラミングしたい。
AnkhSVN導入記 2009年09月版 (4) 使い方編
今回は、もっとも基本的なコミットの方法の確認をします。とりあえずコミットさえできれば、バージョン管理ができたことになるので(Subversionのコマンドについて)。
この記事は、以下の記事の続きです。
- AnkhSVN導入記 2009年09月版 (1) インストール編
- AnkhSVN導入記 2009年09月版 (2) レポジトリ作成編
- AnkhSVN導入記 2009年09月版 (3) ソリューション登録編
AnkhSVNのウィンドウたちとコミット
AnkhSVNをインストールすると、「表示」メニューの中に、
- Pending Changes
- Repository Explorer
- Working Copy Explorer
それぞれ、少しずつ紹介してみます。
Pending Changes(コミットはここから行います)
3つの中で、もっともよく使うウィンドウ。また、今回紹介するコミットもここから行います。では、初回のコミットをしてみます。
左上のCommit ボタン。ここをクリックすると、コミットされます。コミットすることで、レポジトリに対して変更した点を、実際にレポジトリに保存することになります。え?Ctrl+Sの保存はって?Ctrl+Sで保存されるのは、ワーキングコピー(レポジトリからコピーしてきたもの)であって、レポジトリには反映されません。
コミットするときに、そのコミットに対するコメントが記録されます。「このコミットと前回のコミットの間で、いったい何を作業したんだろう?」ということが、すぐ分かって便利ですので、ちゃんとコメントを書いておきましょう。コメントは、Commitボタンを押す前にMessage:のところに入力しておきます。
実際にコミットされるファイル・変更は、下部のリストに一覧表示されます。コミットに成功すると、一覧がクリアされます。
コミットの隣にあるUpdate ボタンですが、これは、レポジトリから、最新のファイルを取得するためのボタンです。ここで注意して欲しいのは、Updateは、ローカルのワーキングコピーを上書きしてしまいます。うっかり押して、せっかくの変更を消してしまわないように気をつけてください。
Repository Explorer
レポジトリを表示して、管理するためのウィンドウ。たくさんレポジトリがあるときは、便利ですが、普段そんなに使うウィンドウではありません。
Working Copy Explorer
こちらは、Repository Explorerとは対照的に、ワーキングコピーを表示するためのウィンドウです。このウィンドウも、Pending Changesに比べたら、重要ではありません。
おわり
とりあえず、コミットできるようになったので、これでよしとしておきます。その他の機能は、Subversionについて調べたり、右クリックで出てくるメニューを調べたりしてみてください。
追記:続き書きました→「AnkhSVN導入記 2009年09月版 (5) 別のPCから接続編」
AnkhSVN導入記 2009年09月版 (3) ソリューション登録編
今回は、前回作成したレポジトリにソリューションを追加するところまでやってみます。
この記事は、以下の記事の続きです。
ソリューションを作成する(既存のソリューションを追加する場合はこのステップを飛ばす)
まずは、ソリューションを作成します。ソリューションには必ず1つ以上のプロジェクトが含まれる関係で、ソリューションを作成するには、「ファイル>新規作成>プロジェクト...」から行います。
ソリューションのディレクトリを作成にチェックを入れて、Add to Subversionのチェックは外れたままにしてOKをクリックすれば完成。どうしてかというと、ここでAdd to Subversionにチェックを入れる方法を覚えても、今まで作成したソリューションを追加することができないからです。そこで、今回の記事では、作成済みのソリューションをSubversionに(レポジトリに)追加する方法をとることにします。
ソリューションをレポジトリに追加する
まず、ソリューション エクスプローラを表示します。そして、レポジトリに追加したいソリューションを右クリック。
右クリックして表示されたメニューから、「Add Solution to Subversion...」をクリック。すると、「This will create a folder in the repository to hold your project and initialize your working copy.」と表示されているウィンドウが表示されます。ここで、一切"Solution"という単語が出てこないところが違和感ありますね。
とりあえず、Project Nameはそのままにしておきましょう。変えてもいいですが。
ここで、ポイントです。実は、Repository Urlの指定が難しいのです。前回の例のように、レポジトリを
D:\subversion\rep>svnadmin create MyRepository
で、作成したとします。すると、レポジトリの本体は、D:\subversion\rep\MyRepositoryです。これを、Repository Urlに入力します。ただし、ここでは、以下のように入力してください。直接フルパスを入力してもだめです!
file:///D:/subversion/rep/MyRepository/
ポイントは3つ。file:///を先頭に付けることと、\ではなく、/を使うこと、そして、最後に/をくっつけることです。すると、入力欄のすぐ下に、レポジトリがツリー表示されます。このツリー表示は、最後のスラッシュまで入力して初めて表示されるので、入力途中は表示されません。スペルミスしないように入力してください。
そうしたら、表示されたレポジトリ(黄色い円柱2つのアイコン)をクリックします。すると、ウィンドウの一番下の「Project will be created in:」にプロジェクト作成パスが記入されます。
設定の続きですが、「Local Folder:」も、そのままでいいでしょう。Local Folderとは、作業コピーを置くところです。Subversionでは、レポジトリの内容は複数人で共有したりするものなので、実際の作業は、ローカルフォルダにコピーして行います。このコピーが作業コピーです。最終的に、作業コピーでの変更点をレポジトリに反映して、バージョン管理が行われていきます。
いよいよ、最後の設定です。「Add trunk Folder for Project」は、オンにしましょう。このtrunk Folderとやらは、Subversionを利用するための、基本的な流儀に登場する重要なフォルダです。必須ではありませんが、Subversionの解説を読むと、当たり前のようにTrunkフォルダが利用されているので、作成しておいた方が後々勉強するに当たって、都合がいいと思います。また、Trunkフォルダがなんだか分からなくても、作って問題になることはないので、とりあえずよく分からなくても作っておくことをおすすめします。
Project will be created in: file:///D:/subversion/rep/MyRepository/(Project Name)/trunk/ と表示されればちゃんと設定ができています。OKをクリックして終了しましょう。
最後に、Log Messageを要求されますが、これは、最初の単純に今回のレポジトリの変更に対するコメントを記録しておく機能です。後々、レポジトリ内部にたくさんのバージョンが記録されたときに、どのような変更だったのかを知る手がかりになります。今回は初回なので、そんなに意味はありませんが、とりあえずなにかしら書いておくといいでしょう。ここでポイントは、日本語OKということです。AnkhSVN自体を日本語化しなくても、日本語を扱う分には全く問題ありません。
part 3 終了
とりあえず、今回、ソリューションをレポジトリに追加しました。以前の方法とは少し異なっているのがポイントですかね。以前の方法というか、以前の解説記事はこちら→VisualStudio2008+Subversion+AnkhSvn2.0導入方法まとめ。
次回は、実際に、レポジトリにコードの変更を登録・記録する方法を確認して、バージョン管理のやり方を練習します。
AnkhSVN導入記 2009年09月版 (2) レポジトリ作成編
前回の記事でAnkhSVNのインストールを完了しているので、 続いて、新規レポジトリの作成を行います。
Visual Studio からは、レポジトリが作成できない
実は、Visual Studio 上から新規にレポジトリ(バージョン管理するためのファイル群)を作成することはできません。
Starting a new repository
Create a Subversion repository either by using the SVN command line tools or TortoiseSVN.
(http://ankhsvn.open.collab.net/ より)
つまり、「新規にレポジトリを作成する際には、コマンドラインツールや、TortoiseSVNなどから別途作成してください」ということです。
では、以下、実際に作成してみます。
Subversionをインストールする
Subversionをインストールしていなかったので、インストールします。
これに関しては、以前のエントリ「VisualStudio2008+Subversion+AnkhSvn2.0導入方法まとめ」を参考にしつつやってみます。
Subversionダウンロード
まず、http://subversion.tigris.org/にアクセス。中央左あたりのGet Subversionの中の左上にあるSource codeをクリック。すると、Source code という見出しの中に、Source Releases Areaというリンクがあるので、そこをクリック。すると、フォルダ階層が表示されるので、その中から、「Subversion>Releases>Windows>Windows Apache 2.2.x」を選択します。
表示されたダウンロードリンクの中から、「Setup-Subversion-1.6.5.msi」を選択してダウンロードします。
Subversionをインストール
Setup-Subversion-1.6.5.msiをダブルクリックして、インストーラに従っていくだけで、インストール終了です。参考までに、インストール完了時に表示されたメッセージをメモしておきます。
Post installation notes for Subversion:
- Read the documentation included with this distribution.
- For more info - Fire up your browser and point it to:
http://subversion.tigris.org/ and look for documentation.- Take a close look in the Readme.txt file found in the Subversion folder and the start menu. It may save you some time if you get into trouble.
- Notes for Windows 9x and Millenium users:
- Add this line to your Autoexec.bat file (adjust the path so it fits your system) if it's not there:
SET APR_ICONV_PATH="C:\Program Files\Subversion\iconv"
- Restart your machine if your Autoexec.bat file is changed.
Thanks for using Subversion! And.. enjoy..
Your Subversion team
レポジトリの作成
Subversionをインストールしたので、コマンドラインから新規にレポジトリを作成してみましょう。
ここでは、個人で利用することを想定し、サーバをたてて…などというようなことはせずに、手軽に簡単にということで、ローカルディスク内に作成します。あしからず。
まず、コマンドプロンプトを起動します(Winキー+Rでcmdと入力してEnterを押すと簡単にコマンドプロンプトが起動できます)。で、作成したいディレクトリに移動します。たとえば、以下のようにします(ユーザ名を仮にdiddidとしてみます)。
C:\Users\diddid\>cd /D D:
D:\subversion\rep>
D:\>mkdir subversion\rep\
D:\>cd subversion\rep
続いて、レポジトリを作成します。
D:\subversion\rep>svnadmin create MyRepository
以上で完了です。簡単ですね。「MyRepository」がレポジトリ名です。レポジトリは、複数ソリューション、複数プロジェクトを保存することができるので、ユーザで一つ、ソリューションで一つなどレポジトリが作成できます。
次回は、実際にソリューションを登録し、バージョン管理ができるようにしてみます。
追記:つづきを書きました→「AnkhSVN導入記 2009年09月版 (3) ソリューション登録編」