2,918 views
この記事は最終更新から 2700日 が経過しています。
やってみたいこと
任意のJPEG画像ファイルをWEBブラウザからアップロードし、指定サイズに拡大・縮小してWEBブラウザに表示する。
ImageMagickではなく GDを使用する。
↓
実行サンプルはこちらです。
//www.dogrow.net/php/sample/00010/
プログラム作成
プログラムの仕様は以下の通り。
・変換可能な画像形式は JPEG, PNG, GIFの3種類とする。
・入力画像は一辺が20~1000ピクセルの画像を処理対象とする。
・出力画像サイズは一辺が20~1000ピクセルの範囲で指定可能とする。
index.php
<!DOCTYPE html> <HTML> <HEAD> <META CHARSET="UTF-8" /> <TITLE>サンプル</TITLE> </HEAD> </BODY> <?php // 画像変換処理要求? if(isset($_POST['exec'])){ try{ if(is_uploaded_file($_FILES['upfile']['tmp_name'])){ // アップロードされた画像を保存 move_uploaded_file($_FILES['upfile']['tmp_name'], 'tmp.img'); // 画像変換&表示 echo "<img src=\"img_resize.php?fpath=tmp.img&w=".$_POST['w']."\">"; } }catch(Exception $e){ echo "[".__LINE__."] Caught exception: ".$e->getMessage(); } } ?> <hr /> <form enctype="multipart/form-data" action="./" method=post> <table style="border:2px #000 solid"> <tr><th>画像ファイル</th><td><input type="file" name="upfile"></td></tr> <tr><th>変更後の画像幅 [pixel]</th><td><input type="text" name="w" value="100"></td></tr> </table> <input name="exec" type="submit" value="JPEG,PNG,GIF画像のサイズを変更します。"> <p style="border:2px #f00 solid;color:#f00;padding:2px;"> ・変換可能な画像形式は JPEG, PNG, GIFの3種類とする。<br /> ・入力画像は一辺が20~1000ピクセルの画像を処理対象とする。<br /> ・出力画像サイズは一辺が20~1000ピクセルの範囲で指定可能とする。 </p> </form> </BODY> </HTML>
img_resize.php
<?php resize_img($_GET['fpath'], $_GET['w']); // 画像変換&出力 function resize_img( $fpath, $w ){ // 画像情報を取得 $ary_info = getimagesize( $fpath ); if($ary_info === FALSE){ goto tagEND; } $img_w = $ary_info[0]; $img_h = $ary_info[1]; $img_type = $ary_info[2]; // 画像サイズチェック if(($img_w > 1000) || ($img_h > 1000)){ goto tagEND; } if(($img_w < 20) || ($img_h < 20)){ goto tagEND; } // 画像処理を選択 $func_create = NULL; $func_display = NULL; switch( $img_type ){ case IMAGETYPE_JPEG: $func_create = "imagecreatefromjpeg"; $func_display = "imagejpeg"; break; case IMAGETYPE_PNG: $func_create = "imagecreatefrompng"; $func_display = "imagepng"; break; case IMAGETYPE_GIF: $func_create = "imagecreatefromgif"; $func_display = "imagegif"; break; default: break; } if($func_create === NULL){ goto tagEND; } // 画像をリサイズ $im_in = $func_create( $fpath ); $dst_w = $w; $dst_h = max(intval($img_h * $w / $img_w), 1); $im_out = imagecreatetruecolor($dst_w, $dst_h); imagecopyresampled($im_out, $im_in, 0, 0, 0, 0, $dst_w, $dst_h, $img_w, $img_h); // HTTP応答として画像を出力 $mime_type = image_type_to_mime_type( $img_type ); header("Content-Type: ".$mime_type); $func_display( $im_out ); imagedestroy( $im_in ); imagedestroy( $im_out ); tagEND: } ?>
実行サンプルはこちらです。
//www.dogrow.net/php/sample/00010/