2009年01月24日

簡易リサイズプログラム

タイトルを変換したら「缶入りサイズプログラム」になった。

Web上で画像のリサイズができる簡易プログラムです。 動かしてるサーバーがへぼいので、デジカメサイズの画像をリサイズしようとするとレスポンスが帰ってこなくなります。 試してみたい方はこちらをどうぞ。

続きにソースコードあり。

PHPのGDライブラリを使ってリサイズしてます。 動かすときにはプログラムと同ディレクトリにtmpという名前のディレクトリをつくる必要があります。 書き込みパーミッションを与えるこのも忘れずに。

<?php

define('STRAGE', 'tmp/');

/***** 変数を初期化 *****/
$source      = null;    // ソース
$resized     = null;    // リサイズ画像
$sWidth      = 0;       // ソースのサイズ
$sHeight     = 0;
$rWidth      = 0;       // リサイズ画像のサイズ
$rHeight     = 0;
$resizedName = '';      // リサイズ画像のファイル名
$error       = array(); // エラーメッセージ

/***** ファイル情報を取得 *****/
$imgName = $_FILES['image']['name'];
$imgType = substr($imgName, -3);

/***** 妥当なファイルか検証 *****/
if(strcmp($imgName, '') == 0) {
	$error[] = 'ファイル名が指定されていません。';
}
if(!preg_match('/^[.-_0-9a-zA-Z]+$/', $imgName)) {
	$error[] = 'ファイル名に使える文字は半角英数字のみです。';
}
if(!(strcmp($imgType, 'jpg') || strcmp($imgType, 'gif') || strcmp($imgType, 'png'))) {
	$error[] = 'ファイルタイプが不正です。対応ファイルはjpg、gif、pngです。';
}

/***** リサイズサイズ *****/
if(preg_match('/^[0-9]+$/', $_POST['width'])) {
	$rWidth = $_POST['width'];
}
else {
	$error[] = 'リサイズ幅が不正です。半角数字で入力してください。';
}

if(preg_match('/^[0-9]+$/', $_POST['height'])) {
	$rHeight = $_POST['height'];
}
else {
	$error[] = 'リサイズ高さが不正です。半角数字で入力してください。';
}

/***** ここまでエラーがなければ処理を実行 *****/
if(count($error) == 0) {
	// ファイルの移動
	move_uploaded_file($_FILES['image']['tmp_name'], STRAGE.$imgName);
	$imgPath = STRAGE.$imgName;
	
	// パラメータ
	list($sWidth, $sHeight) = getimagesize($imgPath);
	$rWidth = $_POST['width'];
	$rHeight = $_POST['height'];
	
	// リサイズ後のファイル名
	$resizedPath = STRAGE.'resized_'.$imgName;
	
	// ファイルタイプで場合分け
	switch($imgType) {
		case 'jpg' :
			$source = imagecreatefromjpeg($imgPath);
			$resized = resize($source, $sWidth, $sHeight, $rWidth, $rHeight);
			imagejpeg($resized, $resizedPath, 100);
			break;
		case 'gif' :
			$source = imagecreatefromgif($imgPath);
			$resized = resize($source, $sWidth, $sHeight, $rWidth, $rHeight);
			imagegif($resized, $resizedPath);
			break;
		case 'png' :
			$source = imagecreatefrompng($imgPath);
			$resized = resize($source, $sWidth, $sHeight, $rWidth, $rHeight);
			imagepng($resized, $resizedPath);
			break;
	}
}

// リサイズ
function resize($source, $sWidth, $sHeight, $rWidth, $rHeight) {
	$resized = imagecreatetruecolor($rWidth, $rHeight);
	imagecopyresampled(
		$resized,
		$source,
		0, 0,
		0, 0,
		$rWidth, $rHeight,
		$sWidth, $sHeight);
	
	return $resized;
}

$_FILES = null;

?>

<html>

<head>
	<title>Image Resizer</title>
	<style type="text/css">
		th {
			padding-right: 10px;
			text-align: left;
		}
		#error {
			color: #FF0000;
		}
	</style>
</head>

<body>

<h1>RESIZE</h1>

<p>あまり大きなサイズの画像をアップロードするとレスポンスが帰ってこなくなります。</p>

<ul id="error">
<?php
for($i = 0; $i < count($error); $i++) {
	echo '<li>'.$error[$i].'</li>';
}
?>
</ul>

<form action="<?=$PHPSELF?>" enctype="multipart/form-data" method="post">
	<table>
		<tr><th>ファイル</th><td><input type="file" name="image" /></td></tr>
		<tr><th>幅</th><td><input type="text" name="width" /></td></tr>
		<tr><th>高さ</th><td><input type="text" name="height" /></td></tr>
		<tr><th> </th><td><input type="submit" value="リサイズ" /></td></tr>
	</table>
</form>

<h2>ファイル情報</h2>
<table>
	<tr><th>ファイル名</th>	<td><?=$imgName?></td></tr>
	<tr><th>拡張子</th><td><?=$imgType?></td></tr>
	<tr><th>サイズ</th><td><?=$sWidth?> x <?=$sHeight?></td></tr>
	<tr><th>リサイズ</th><td><?=$rWidth?> x <?=$rHeight?></td></tr>
</table>

<h2>リサイズ後</h2>
<img src="<?=$resizedPath?>" width="<?=$rWidth?>" height="<?=$rHeight?>" />

<h2>ソース画像</h2>
<img src="<?=$imgPath?>" width="<?=$sWidth?>" height="<?=$sHeight?>" />

</body>

</html>

主専攻実験で縮小画像を動的に作るプログラムを書くついでにつくったら半日がかり。 肝心の実験が進まない・・・。



タグ :PHPリサイズ

同じカテゴリー(プログラミング)の記事画像
GoogleReaderを3ペイン表示にするスクリプトのα版
文字サイズを拡大縮小するスクリプト
電卓を表示するブックマークレット
Twitterで費やした時間を表示するスクリプト
ニコニコのタグをプレビューするスクリプト
ニコニコで広告を消すスクリプト
同じカテゴリー(プログラミング)の記事
 GoogleReaderを3ペイン表示にするスクリプトのα版 (2009-07-26 22:00)
 クリック動作を無効にするジョークブックマークレット (2009-07-19 23:52)
 文字サイズを拡大縮小するスクリプト (2009-07-12 18:09)
 ダブルクリックでスクロールするスクリプト (2009-07-05 14:22)
 電卓を表示するブックマークレット (2009-06-27 21:40)
 ごくごく一部の顔文字を絵文字に置き換えるスクリプト (2009-05-21 23:06)
Posted by Handle at 23:26│Comments(0)プログラミング
コメントフォーム
上の画像に書かれている文字を入力して下さい
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。