PhoneGapでカメラロールから写真選択

はじめに

さて、今回はPhoneGapでカメラロールから写真を取得してみようと思います。

始める前に、iPhoneシミュレーターに写真を追加します。追加したい写真をiPhoneシミュレーターにドラッグアンドドロップするとSafariが開いて写真が表示されるので、それを長押しして保存を選べばカメラロールに写真が追加されます。ちなみに写真の追加先は、/Library/Application Support/iPhone Simulator/{version}/Media/DCIM/100APPLEの様です。(LionからLibraryは隠しフォルダになっています。ファインダーから見るにはoptionを押しながらメニューのGOを開けば表示されます。)

実装する

画面

画面は、フッターにボタンを配置してそのボタンをタップするとカメラロールが表示され、その中から選んだ写真を画面に表示する様にします。htmlはこんな感じです。(jQuery Mobileを使ってます。)

<div data-role="page">
	<div data-role="header">
		<h1>PhotoApp</h1>
	</div>
	<div data-role="content">
		<img id="selectedPhoto" width="640" height="480">
	</div>
	<div data-role="footer" class="ui-bar" data-position="fixed">
		<div data-role="navbar">
			<a href="#" id="selectPhotoBtn">Select Photo</a>
		</div>
	</div>
</div>

アクション

実装をする前にPhoneGapのAPI(phonegap-1.2.0.js)を読み込む必要があるのですが、これはプロジェクトフォルダ内にコピーされたwww内に自動的に出来る様です。(前回の記事の様にプロジェクトを作ると。)
写真を取得するには、

navigator.camera.getPicture( cameraSuccess, cameraError, [ cameraOptions ] );

を使います。引数の意味は次の通りです。

  • cameraSuccess:データを取得した後のコールバック関数
  • cameraError:データ取得失敗時のコールバック関数
  • cameraOptions:オプション
    • quality:0-100
    • destinationType
      • DATA_URL(0):base64にエンコードされた文字列
      • FILE_URI(1):ファイルのURI
    • PictureSourceType
      • PHOTOLIBRARY(0)
      • CAMERA(1)
      • SAVEDPHOTOALBUM(2)
    • allowEdit:選択前に編集出来るかどうかのブール値
    • EncodingType
      • JPEG(0)
      • PNG(1)
    • targetWidth:横のアスペクト比
    • targetHeight:縦のアスペクト比
    • MediaType:PHOTOLIBRARYかSAVEDPHOTOALBUMの時だけ
      • PICTURE(0):写真だけ
      • VIDEO(1):ビデオだけ
      • ALLMEDIA(2):全て

実装は簡単です。以下の様にしてみました。

$(function(){
	$("#selectPhotoBtn").click(function(){
		navigator.camera.getPicture(function(imageURI){
			$("#selectedPhoto").attr("src", imageURI);
		}, function(msg){
			alert("Error : " + msg);
		}, {
			quality:50,
			destinationType:Camera.DestinationType.FILE_URI,
			sourceType:Camera.PictureSourceType.SAVEDPHOTOALBUM,
		});
	});
});

では、実行してみます。こんな感じです。

むすび

簡単に写真を取得して表示する事ができました。他の機能も色々と試してみて順次紹介します。