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がオンになっているかどうかを確認します.使用関数:
PHPで画像を作成するには、4つのステップが必要です.キャンバスの作成:キャンバスを作成し、その後の操作はこのキャンバス操作に基づいています. グラフィックの描画:キャンバスに画像の輪郭または入力テキストを描画します. 出力画像:名前を付けて保存してもよい. リソースの解放:画像に使用されるメモリリソースを解放します.
3、キャンバス座標系説明
キャンバスの座標系は、座標原点がキャンバスの左上隅にあり、画素単位で、正右方がX軸正方向、直下がY軸正方向である.
二、画像の作成と破棄
1、既存の画像に基づく画像を作成するの説明:ファイルまたはURLから新しい画像 を作成する構文: パラメータ:$filenameは画像の完全なパス です.リターン:成功後に画像リソースに戻り、失敗後にFALSE に戻る.ヒント:imagecreatefromjpeg()およびimagecreatefromgif()構文は、この関数と同じ です.
2、空のキャンバス画像を作成する説明:24ビットカラー、すなわちRGB(256256256) をサポートする真カラー画像を新規作成する.構文: パラメータ:width画像幅;Height画像高さ リターン:成功後に画像リソースに戻り、失敗後にFALSE に戻る.
3、画像資源の廃棄記述:画像を破棄する.イメージ画像識別子に関連付けられたメモリ を解放する.構文: パラメータ:$imageはimagecreatetruecolor()によって作成された画像識別子 である.
三、画像操作
1、画像に色を割り当てる構文: パラメータ:$image画像リソース識別子;色値は10進数(0-255)、16進数(0 x 00-0 xFF)
2、画像をブラウザに出力またはファイルを保存する説明:JPG/GIF/PNG形式でブラウザまたはファイル に画像を出力する.構文: パラメータ: $filenameで、作成した画像をファイルに保存します.省略すると、ブラウザ出力 に直接出力.このパラメータを省略してqualityパラメータを指定する場合はNULL を使用します. qualityはオプションで、0(最悪の品質、ファイルが小さい)から100(最適な品質、ファイルが最大)の範囲です.既定の質量値(約75) ヒント:imagegf()、imagepng()は、imagejpeg()フォーマットと同じですが、3番目のパラメータ はありません.
3、水平に1行の文字列を描く説明:1行の文字列を水平に描く 構文: パラメータ: $img画像リソース $fontフォントサイズ、値1、2、3、4、5、内蔵フォント を使用 x,yは文字列の開始座標を描画し、一般的に文字列の左上隅 である.$sは、描画する1行の文字列 を表します.$colはテキスト色 を表します.
4、キャンバスの幅と高さを取得する幅: 高さ: 5、内蔵フォントの幅と高さを取得する説明:指定フォントの文字幅または高さの画素値 を返す.フォント幅: フォント高さ: ヒント:$fontはフォントサイズ、値1-5、最大5 6、例:画像上に行中央の文字列を描く
知るべき知識:画像キャンバス中央 キャンバス始点座標 を先に計算する.画像x軸座標:(キャンバス幅-画像幅)/2 画像y軸座標:(キャンバス高さ-画像高さ)/2
7、長方形を描いて塗りつぶす説明:長方形を描き、 を塗りつぶす.構文: パラメータ: x 1,y 1左上隅座標 x 2,y 2右上隅座標 $color背景色 を塗りつぶす
8、単一画素を描く説明:単一画素 を描く構文: 説明:imagesetpixel()image画像にcolor色でx,y座標(画像左上角0,0)に点 を描く.
四、例:画像検証コード
1、画像検証コードの描画
2、指定範囲の配列を生成する記述:指定範囲ユニットを含む配列 を確立する構文: パラメータ: $start指定範囲1番目の値 $limit指定範囲最後の値 $stepステップ値を指定します.正の整数でなければなりません.デフォルトは1 です.
3、連結配列記述:1つまたは複数の配列を結合する 構文: は、入力された配列に同じ文字列のキー名がある場合、そのキー名の後ろの値が前の値を上書きすることを示す.ただし、配列に数字キー名が含まれている場合、後の値は元の値を上書きするのではなく、後の に付加される.
4、配列から1つ以上のセルをランダムに取り出すの説明:配列から1つ以上のユニット をランダムに取り出す.構文: パラメータ:inputは現在の配列を表し、num_reqは、いくつのユニット を取り出したいかを示しています.
5、より良い乱数を生成する説明:より良い乱数 を生成する構文: パラメータ:minオプションで返される最小値(デフォルト:0);maxオプションで返される最大値 五、例:1行の漢字を画像に書き込む説明:TrueTypeフォントで画像にテキスト を書き込む.構文: パラメータ: $size、サイズ、カスタマイズ、wordサイズと同じ $angle、回転角度(0~360) xおよびyは、最初の文字の基本点(文字の左下隅) を定義する.$fontfileは、使用したいTrueTypeフォントのパス です.$text,UTF-8符号化テキスト文字列(他の符号化は変換する)
六、例:画像透かし効果を作る説明:画像に透明な色を割り当てるimagecolloallocatealpha() 構文: では、imagecorolallocatealpha()の動作はimagecorallocate()と同じであるが、0から127までの値を持つ追加の透明度パラメータalphaが追加されていることを示している.0は完全不透明、127は完全透明 を示す.
七、例:画像サムネイルを生成するは、1枚の画像の正方形の領域を別の画像にコピーする、画素値を滑らかに挿入することにより、画像のサイズを小さくする、依然として大きな解像度 を維持することを説明する.構文: パラメータ: $dst_イメージ、対象画像 $src_イメージ、ソースイメージ dst_xとdst_y,対象画像x,y座標 src_xとsrc_y,ソース画像x,y座標 dst_wとdst_h,対象画像の幅と高さ src_wとsrc_h,ソース画像の幅と高さ ヒント:ソースとターゲットの幅と高さが異なる場合、対応する画像の収縮と伸長が 行われます.
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、既存の画像に基づく画像を作成する
resource imagecreatefrompng ( string $filename )
//
$filename = "./images/01.jpg";
// ,
$img = imagecreatefromjpeg($filename);
//
header("Content-type:image/jpeg");
imagejpeg($img);
//
imagedestroy($img);
2、空のキャンバス画像を作成する
resource imagecreatetruecolor ( int $width , int $height )
//
$img = imagecreatetruecolor(400, 300);
//
header("Content-type:image/jpeg");
imagejpeg($img);
//
imagedestroy($img);
3、画像資源の廃棄
bool imagedestroy ( resource $image )
//
$img = imagecreatetruecolor(400, 300);
//
imagedestroy($img);
//
var_dump($img);
三、画像操作
1、画像に色を割り当てる
int imagecolorallocate(resource $image,int $red,int $green,int $blue)
//
$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、画像をブラウザに出力またはファイルを保存する
bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )
//
$img = imagecreatefromjpeg("./images/01.jpg");
// , header()
// jpeg , 3
//imagepng() imagegif() 3
imagejpeg($img, './images/02.jpg', 100);
//
imagedestroy($img);
3、水平に1行の文字列を描く
bool imagestring(resource $img,int $font,int $x,int $y,string $s,int $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 )
int imagefontwidth ( int $font )
int imagefontheight ( int $font )
知るべき知識:
//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 )
8、単一画素を描く
bool imagesetpixel ( resource $image , int $x , int $y , int $color )
//
$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 ] )
3、連結配列
array array_merge ( array $array1 [, array $... ] )
4、配列から1つ以上のセルをランダムに取り出す
mixed array_rand ( array $input [, int $num_req = 1 ] )
5、より良い乱数を生成する
int mt_rand ( int $min , int $max )
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
// 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);
六、例:画像透かし効果を作る
int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
//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);
七、例:画像サムネイルを生成する
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 )
//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);