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>
主専攻実験で縮小画像を動的に作るプログラムを書くついでにつくったら半日がかり。 肝心の実験が進まない・・・。
GoogleReaderを3ペイン表示にするスクリプトのα版
クリック動作を無効にするジョークブックマークレット
文字サイズを拡大縮小するスクリプト
ダブルクリックでスクロールするスクリプト
電卓を表示するブックマークレット
ごくごく一部の顔文字を絵文字に置き換えるスクリプト
クリック動作を無効にするジョークブックマークレット
文字サイズを拡大縮小するスクリプト
ダブルクリックでスクロールするスクリプト
電卓を表示するブックマークレット
ごくごく一部の顔文字を絵文字に置き換えるスクリプト
Posted by Handle at 23:26│Comments(0)│プログラミング
コメントフォーム