php画像処理に関するまとめ

10798 ワード

一、画像処理の概要
1、GD 2画像拡張ライブラリを開く
PHPはHTMLの出力のみを生成することに限らず、複数の異なるフォーマットの画像ファイルを作成することもできます.PHPはいくつかの内蔵画像処理関数を提供し、GD関数ライブラリを使用して新しい画像を作成したり、既存の画像を処理したりすることもできます.現在、GD 2ライブラリはJPEG、PNG、WBMP形式をサポートしています.
GD拡張は動的に画像を作成するために用いられ、C言語で記述され、オープンソースであり、現在のバージョンは2.0であるため、GD 2と呼ばれる.
GD 2拡張ライブラリを開く:php.iniのextension=php_gd 2.dllオプションの前のセミコロンを外し、再起動します.
画像拡張ライブラリGD 2がオンになっているかどうかを確認します.使用関数:phpinfo();2、画像を作成する大まかな手順
PHPで画像を作成するには、4つのステップが必要です.
  • キャンバスの作成:キャンバスを作成し、その後の操作はこのキャンバス操作に基づいています.
  • グラフィックの描画:キャンバスに画像の輪郭または入力テキストを描画します.
  • 出力画像:名前を付けて保存してもよい.
  • リソースの解放:画像に使用されるメモリリソースを解放します.

  • 3、キャンバス座標系説明
    キャンバスの座標系は、座標原点がキャンバスの左上隅にあり、画素単位で、正右方がX軸正方向、直下がY軸正方向である.
    二、画像の作成と破棄
    1、既存の画像に基づく画像を作成する
  • の説明:ファイルまたはURLから新しい画像
  • を作成する
  • 構文:resource imagecreatefrompng ( string $filename )
  • パラメータ:$filenameは画像の完全なパス
  • です.
  • リターン:成功後に画像リソースに戻り、失敗後にFALSE
  • に戻る.
  • ヒント:imagecreatefromjpeg()およびimagecreatefromgif()構文は、この関数と同じ
  • です.
    //             
    $filename = "./images/01.jpg";
    //    ,       
    $img = imagecreatefromjpeg($filename);
    //        
    header("Content-type:image/jpeg");
    imagejpeg($img);
    //    
    imagedestroy($img);
    

    2、空のキャンバス画像を作成する
  • 説明:24ビットカラー、すなわちRGB(256256256)
  • をサポートする真カラー画像を新規作成する.
  • 構文:resource imagecreatetruecolor ( int $width , int $height )
  • パラメータ:width画像幅;Height画像高さ
  • リターン:成功後に画像リソースに戻り、失敗後にFALSE
  • に戻る.
    //       
    $img = imagecreatetruecolor(400, 300);
    //        
    header("Content-type:image/jpeg");
    imagejpeg($img);
    //    
    imagedestroy($img);
    

    3、画像資源の廃棄
  • 記述:画像を破棄する.イメージ画像識別子に関連付けられたメモリ
  • を解放する.
  • 構文:bool imagedestroy ( resource $image )
  • パラメータ:$imageはimagecreatetruecolor()によって作成された画像識別子
  • である.
    //       
    $img = imagecreatetruecolor(400, 300);
    //    
    imagedestroy($img);
    //           
    var_dump($img);
    

    三、画像操作
    1、画像に色を割り当てる
  • 構文:int imagecolorallocate(resource $image,int $red,int $green,int $blue)
  • パラメータ:$image画像リソース識別子;色値は10進数(0-255)、16進数(0 x 00-0 xFF)
  • //       
    $img = imagecreatetruecolor(400, 300);
    //    
    $bgcolor = imagecolorallocate($img, 0xFF, 0xFF, 0x00);
    //       
    imagefill($img, 0, 0, $bgcolor);
    //        
    header("Content-type:image/jpeg");
    imagejpeg($img);
    //    
    imagedestroy($img);
    

    2、画像をブラウザに出力またはファイルを保存する
  • 説明:JPG/GIF/PNG形式でブラウザまたはファイル
  • に画像を出力する.
  • 構文:bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )
  • パラメータ:
  • $filenameで、作成した画像をファイルに保存します.省略すると、ブラウザ出力
  • に直接出力.
  • このパラメータを省略してqualityパラメータを指定する場合はNULL
  • を使用します.
  • qualityはオプションで、0(最悪の品質、ファイルが小さい)から100(最適な品質、ファイルが最大)の範囲です.既定の質量値(約75)
  • ヒント:imagegf()、imagepng()は、imagejpeg()フォーマットと同じですが、3番目のパラメータ
  • はありません.
    //          
    $img = imagecreatefromjpeg("./images/01.jpg");
    //        ,      header()  
    //    jpeg  ,      3     
    //imagepng() imagegif()   3   
    imagejpeg($img, './images/02.jpg', 100);
    //    
    imagedestroy($img);
    

    3、水平に1行の文字列を描く
  • 説明:1行の文字列を水平に描く
  • 構文:bool imagestring(resource $img,int $font,int $x,int $y,string $s,int $col)
  • パラメータ:
  • $img画像リソース
  • $fontフォントサイズ、値1、2、3、4、5、内蔵フォント
  • を使用
  • x,yは文字列の開始座標を描画し、一般的に文字列の左上隅
  • である.
  • $sは、描画する1行の文字列
  • を表します.
  • $colはテキスト色
  • を表します.
    //       
    $img = imagecreatetruecolor(200, 50);
    //    
    $bgcolor = imagecolorallocate($img, 200, 200, 200);
    $fgcolor = imagecolorallocate($img, 0xFF, 0x00, 0x00);
    //        
    imagefill($img, 0, 0 ,$bgcolor);
    //            
    $str1 = "Welcome to Beijing!";
    $str2 = "Welcome to Beijing!";
    $font = 5;
    imagestring($img, $font, 25, 5, $str1, $fgcolor);
    imagestring($img, $font, 25, 25, $str2, $fgcolor);
    //          
    header("Content-type:image/png");
    imagepng($img);
    imagedestroy($img);
    

    4、キャンバスの幅と高さを取得する
  • 幅:int imagesx ( resource $image )
  • 高さ:int imagesy ( resource $image )
  • 5、内蔵フォントの幅と高さを取得する
  • 説明:指定フォントの文字幅または高さの画素値
  • を返す.
  • フォント幅:int imagefontwidth ( int $font )
  • フォント高さ:int imagefontheight ( int $font )
  • ヒント:$fontはフォントサイズ、値1-5、最大5
  • 6、例:画像上に行中央の文字列を描く
    知るべき知識:
  • 画像キャンバス中央
  • キャンバス始点座標
  • を先に計算する.
  • 画像x軸座標:(キャンバス幅-画像幅)/2
  • 画像y軸座標:(キャンバス高さ-画像高さ)/2
  • //1、          
    $img = imagecreatefromjpeg('./images/img02.jpg');
    //2、    
    $fontcolor = imagecolorallocate($img, 0xFF, 0x00, 0x00);
    //3、          
    $fontsize = 5;
    $str = "Welcome";
    $imgWidth = imagesx($img);
    $imgHeight = imagesy($img);
    $fontWidth = imagefontwidth($fontsize);
    $fontHeight = imagefontheight($fontsize);
    $x = ($imgWidth - $fontWidth * strlen($str)) / 2;
    $y = ($imgHeight - $fontHeight) / 2;
    //4、           
    imagestring($img, $fontsize, $x, $y, $str, $fontcolor);
    //    ,       
    header("Content-type:image/png");
    imagepng($img);
    imagedestroy($img);
    

    7、長方形を描いて塗りつぶす
  • 説明:長方形を描き、
  • を塗りつぶす.
  • 構文:bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
  • パラメータ:
  • x 1,y 1左上隅座標
  • x 2,y 2右上隅座標
  • $color背景色
  • を塗りつぶす

    8、単一画素を描く
  • 説明:単一画素
  • を描く
  • 構文:bool imagesetpixel ( resource $image , int $x , int $y , int $color )
  • 説明:imagesetpixel()image画像にcolor色でx,y座標(画像左上角0,0)に点
  • を描く.
    //       
    $img = imagecreatetruecolor(400, 300);
    //    
    $bgcolor = imagecolorallocate($img, 0xCC, 0xCC, 0xCC);
    //         
    imagefilledrectangle($img, 0, 0, 400, 300, $bgcolor);
    //       
    for($i = 0; $i <= 1000; $i++)
    {
        $pixcolor = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 100), mt_rand(0, 100));
        imagesetpixel($img, mt_rand(0, 400), mt_rand(0, 300), $pixcolor);
    }
    //    ,       
    header("Content-type:image/png");
    imagepng($img);
    imagedestroy($img);
    

    四、例:画像検証コード
    1、画像検証コードの描画
    //1、           
    //2、          
    
    // .  4      
    //a.           
    $arr = array_merge( range('a', 'z'), range(0, 9), range('A', 'Z') );
    //b.       (    )
    shuffle($arr);
    shuffle($arr);
    //c.            
    $arr2 = array_rand($arr, 4);
    //d.                 
    $str = '';
    foreach($arr2 as $index)
    {
      $str .= $arr[$index];
    }
    
    // .            
    //a.       
    $img = imagecreatefromjpeg('./images/captcha_bg2.jpg');
    //b.    
    $fontcolor = imagecolorallocate($img, mt_rand(200, 255),  mt_rand(200, 255), mt_rand(200, 255));
    //c.          
    $imgWidth = imagesx($img);
    $imgHeight = imagesy($img);
    $fontsize = 5;
    $fontWidth = imagefontwidth($fontsize);
    $fontHeight = imagefontheight($fontsize);
    $x = ($imgWidth - $fontWidth * strlen($str)) / 2;
    $y = ($imgHeight - $fontHeight) / 2;
    //d.          
    imagestring($img, $fontsize, $x, $y, $str, $fontcolor);
    //         
    header('content-type:image/png');
    imagepng($img);
    imagedestroy($img);
    

    2、指定範囲の配列を生成する
  • 記述:指定範囲ユニットを含む配列
  • を確立する
  • 構文:array range ( mixed $start , mixed $limit [, number $step = 1 ] )
  • パラメータ:
  • $start指定範囲1番目の値
  • $limit指定範囲最後の値
  • $stepステップ値を指定します.正の整数でなければなりません.デフォルトは1
  • です.

    3、連結配列
  • 記述:1つまたは複数の配列を結合する
  • 構文:array array_merge ( array $array1 [, array $... ] )
  • は、入力された配列に同じ文字列のキー名がある場合、そのキー名の後ろの値が前の値を上書きすることを示す.ただし、配列に数字キー名が含まれている場合、後の値は元の値を上書きするのではなく、後の
  • に付加される.
    4、配列から1つ以上のセルをランダムに取り出す
  • の説明:配列から1つ以上のユニット
  • をランダムに取り出す.
  • 構文:mixed array_rand ( array $input [, int $num_req = 1 ] )
  • パラメータ:inputは現在の配列を表し、num_reqは、いくつのユニット
  • を取り出したいかを示しています.
    5、より良い乱数を生成する
  • 説明:より良い乱数
  • を生成する
  • 構文:int mt_rand ( int $min , int $max )
  • パラメータ:minオプションで返される最小値(デフォルト:0);maxオプションで返される最大値
  • 五、例:1行の漢字を画像に書き込む
  • 説明:TrueTypeフォントで画像にテキスト
  • を書き込む.
  • 構文:array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
  • パラメータ:
  • $size、サイズ、カスタマイズ、wordサイズと同じ
  • $angle、回転角度(0~360)
  • xおよびyは、最初の文字の基本点(文字の左下隅)
  • を定義する.
  • $fontfileは、使用したいTrueTypeフォントのパス
  • です.
  • $text,UTF-8符号化テキスト文字列(他の符号化は変換する)
  • //        TTF  ,        ,   
    //1、       
    $img = imagecreatetruecolor(400, 200);
    //2、    
    $bgcolor = imagecolorallocate($img, 200, 200, 200);
    $fgcolor = imagecolorallocate($img, 255, 0, 0);
    //3、        
    imagefill($img, 0, 0, $bgcolor);
    //4、       
    $fontsize = 24;
    $fontfile = './images/msyh.ttf';
    $str1 = 'HelloWorld';
    $str2 = '     ';
    
    //5、      TTF   
    imagettftext($img, $fontsize, 0, 50, 100, $fgcolor, $fontfile, $str1);
    imagettftext($img, 18, 0, 150, 150, $fgcolor, $fontfile, $str2);
    //6、    ,     
    header('content-type:image/png');
    imagepng($img);
    imagedestroy($img);
    

    六、例:画像透かし効果を作る
  • 説明:画像に透明な色を割り当てるimagecolloallocatealpha()
  • 構文:int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
  • では、imagecorolallocatealpha()の動作はimagecorallocate()と同じであるが、0から127までの値を持つ追加の透明度パラメータalphaが追加されていることを示している.0は完全不透明、127は完全透明
  • を示す.
    //1、          
    $img = imagecreatefromjpeg('./images/01.jpg');
    //2、        
    $fontcolor = imagecolorallocatealpha($img, 0xdd, 0xdd, 0xdd, 100);
    //3、       TTF   
    $fontsize = 24;
    $fontfile = './images/msyhbd.ttf';
    $str = '     ';
    imagettftext($img, $fontsize, 15, 45, 300, $fontcolor, $fontfile, $str);
    //4、    
    header('content-type:image/png');
    imagepng($img);
    imagedestroy($img);
    

    七、例:画像サムネイルを生成する
  • は、1枚の画像の正方形の領域を別の画像にコピーする、画素値を滑らかに挿入することにより、画像のサイズを小さくする、依然として大きな解像度
  • を維持することを説明する.
  • 構文:bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
  • パラメータ:
  • $dst_イメージ、対象画像
  • $src_イメージ、ソースイメージ
  • dst_xとdst_y,対象画像x,y座標
  • src_xとsrc_y,ソース画像x,y座標
  • dst_wとdst_h,対象画像の幅と高さ
  • src_wとsrc_h,ソース画像の幅と高さ
  • ヒント:ソースとターゲットの幅と高さが異なる場合、対応する画像の収縮と伸長が
  • 行われます.
    //1、         
    $src_img = imagecreatefromjpeg('./images/03.jpg');
    $src_w = imagesx($src_img);
    $src_h = imagesy($src_img);
    //2、      ,           
    $dst_w = $src_w * 0.3;
    $dst_h = $src_h * 0.3;
    $dst_img = imagecreatetruecolor($dst_w, $dst_h);
    //3、         
    imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
    //4、       
    imagejpeg($dst_img, './images/s_03.jpg', 100);
    //5、    
    imagedestroy($src_img);
    imagedestroy($dst_img);