1,835 views
この記事は最終更新から 3025日 が経過しています。
やってみたいこと
「(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/
アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2025-12-14: 0回 2025-12-13: 1回 2025-12-12: 0回 2025-12-11: 1回 2025-12-10: 0回 2025-12-09: 0回 2025-12-08: 5回