画像ファイルの操作

画像ファイルをフォームや外部のURLから取り込んで保存し、リサイズして表示することができます。
フレームワークを通じて操作した画像ファイルは設定ファイル{(app_root), _common}/configs/Image.phpsave_dirで設定したディレクトリに格納されます。 ですが以下の手順に従えばファイル格納パスは意識せず、ファイル名のみで画像ファイルを操作できるようになっています。

画像ファイルの保存

画像ファイルの保存はモジュールImageを利用して行います。

$this->newModule('image')->saveFile($uploaded_files[0]['path']);

画像ファイルの削除

画像ファイルの削除はモジュールImageを利用して行います。

$this->newModule('image')->deleteFile('削除するファイル名');

以下は

するプログラムの例です。

public function actionCommit() {
	$this->checkPrevActions(array(
		array('confirm'),
	));

	$form			= $this->newForm('example_form');
	$image_module	= $this->newModule('image');

	$form_values	= $form->loadValues();
	$uploaded_files	= $form->loadUploadedFiles();

	// 顔写真ファイルがアップロードされていたらファイルを保存
	if (isset($uploaded_files['face_image_file'])) {
		$form_values['face_image_file'] = $image_module->saveFile($uploaded_files['face_image_file']['path']);
	}

	if ($this->newModel('example_model')->commitUpdate($form_values) === FALSE) {
		// エラーの場合、保存した顔写真ファイルを削除
		if (isset($uploaded_files['face_image_file'])) {
			$image_module->deleteFile($uploaded_files['face_image_file']);
		}

		$this->redirect(array('index'));
	}

	// 顔写真ファイルがアップロードされて以前の顔写真ファイルがある場合、以前のファイルを削除
	if (isset($uploaded_files['face_image_file']) && ($prev_face_image_file = $this->load('prev_face_image_file', FALSE))) {
		$image_module->deleteFile($prev_face_image_file);
	}

	$this->freeAll();
	$form->freeAll();

	$this->redirectReturn();
}

画像ファイルの表示

画像ファイルの表示には画像サーバを使用します。画像サーバを使うと

  • ファイル名を指定するだけで画像を表示
  • サイズを指定した画像の縮小

ができます。
画像サーバファイルは通常のフレームワークとは異なり、画像のみを扱う(CZ_root)/ChimpanzeeImageServer.phpというファイルになります。

画像サーバの準備

画像サーバを呼び出すために通常のフロントコントローラとは別に以下のフロントコントローラを作成します。

<?
try {
	require_once '/path/to/Chimpanzee-X.X/ChimpanzeeImageServer.php';
	new CZImageServer('/path/to/project01');
} catch (CZException $e) {
	echo 'Fatal error: ' . $e->getMessage();
}
?>

画像サーバの呼び出して画像を表示

先のフロントコントローラを仮にimage.phpとしてドキュメントルート直下に配置する場合、以下のURLで画像サーバのフロントコントローラを呼び出します。

http://mydomain.com/image.php?fl=xxxxx&mw=100&mh=200

実際のHTMLソースの中では

<img src="http://mydomain.com/image.php?fl=xxxxx&mw=100&mh=200" />

という記述になります。
引数(クエリパラメータ形式で指定)は以下のとおりです。

fl (string)
画像ディレクトリ内のファイル名(パスではない)を指定します。
mw (int option)
表示する画像の最大幅(単位:ピクセル)を指定します。
mh (int option)
表示する画像の最大高(単位:ピクセル)を指定します。

mwmhに合わせて自動で縦横比例縮小します。両方指定でも一方のみ指定でも結構です(両方指定した場合は小さいほうに合わせます)。画像サーバではgif/jpg/pngのみ表示されます。これ以外の画像は表示されないので注意してください。
以下はデータベースのユーザマスタから画像ファイル名を取得して画像を表示するプログラムの例です。

ctrls/User.php

public function actionDetail() {
	$login = $this->newModule('login');
		:
	$user = $login->relogin();
	$this->addViewVar('user', $user);
}

views/user/detail.html

<? if ($example['face_image_file']): ?>
	<img src="<?= $this->image_server_url(); ?>?fl=<?= $user['face_image_file']; ?>&mw=160" border="0">
<? else: ?>
	<img src="<?= $this->images_url(); ?>/tmp_face.png" width="160" height="240" border="0">
<? endif; ?>
ページトップへ