1,391 views
この記事は最終更新から 2627日 が経過しています。
やってみたいこと
「(9) GDでアップロード画像を白黒画像に変換」 で作成したプログラムのように、ピクセル単位の画像処理をPHPで実行すると処理速度が遅い。そこで、画像処理自体は外部プログラムに実行を依頼し、その実行結果をPHPで使わせてもらうようにしたい。
すなわち、PHPから外部プログラムを実行したい。
実行サンプルはこちらです。
http://www.dogrow.net/php/sample/00013/
「(9) GDでアップロード画像を白黒画像に変換」と比較すると圧倒的に高速に処理できる!
プログラム作成
プログラムの仕様は以下の通り。
・指定された画像ファイルを ImageMagicksの convert コマンドを使って白黒画像に変換する。
・作成した画像をサーバー上にファイル出力し、これをWEBブラウザ上で表示する。
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'); // 画像変換&表示 $img_out = image_convert('tmp.img'); if($img_out != ""){ echo "<img src=\"$img_out\">"; } } }catch(Exception $e){ echo "[".__LINE__."] Caught exception: ".$e->getMessage(); } } ?> <hr /> <form enctype="multipart/form-data" action="./" method="post"> <input type="file" name="upfile"><br /> <input name="exec" type="submit" value="カラー画像をグレースケール画像に変換します。(一辺2000ピクセル以下)"> </form> </BODY> </HTML> <?php ///////////////////////////////////////// // 入力画像を白黒画像に変換 function image_convert( $fpath_in ){ $fpath_out = ""; // 入力画像の情報を取得 $ary_info = getimagesize( $fpath_in ); if($ary_info !== FALSE){ // 巨大画像は処理しない。 if($ary_info[0] > 2000){ exit; } if($ary_info[1] > 2000){ exit; } // 画像ファイル形式に対応した拡張子のファイル名を作成 $fpath = "img_result".image_type_to_extension($ary_info[2]); // convertコマンドを使って白黒画像を作成 exec("convert $fpath_in -type Grayscale $fpath", $resp, $code); if($code != 0){ echo "Error<hr />"; }else{ echo "Done!<hr />"; $fpath_out = $fpath; } } return $fpath_out; } ?>
実行サンプルはこちらです。
http://www.dogrow.net/php/sample/00013/