次のメソッドがメソッドです:
if(!function_exists('imagecreate')) {
die('このサーバーは GD モジュールをサポートしていません')
}
サポートされていない場合、どのように設定しますか? gd モジュール ファイルの dll をダウンロードし、php.ini を変更し、サーバーを再起動します
以下、PHP 描画を PS と呼びます。 PS を使用する場合は、必要な次の手順を完了する必要があります。
1: 基本的な PS オブジェクト ($image であるとします) を作成し、背景を塗りつぶします (デフォルトでは黒)。その後のすべての PS 操作はこの背景画像に基づいて行われます。
2: $image に描画します。
3: 出力します。この画像。
4: オブジェクトを破棄し、使用されているメモリをクリアします。
まず、一般的に使用される関数について説明します。これらの関数は、PHP マニュアルで詳しく説明されています。
resource imagecreate (int x_size. , int y_size)
imagecreate() は、サイズ x_size および y_size の空の画像を表す画像識別子を返します。
この関数は基本的に imagetruecolor($width,$height) と同じです
-------------------------------- -- ------------
int imagecolorallocate ( resource image, int red, int green, int blue )
imagecolorallocate() は、指定された RGB コンポーネントで構成される色。 image パラメータは、imagecreatetruecolor() 関数の戻り値です。赤、緑、青は、それぞれ目的の色の赤、緑、青の成分です。これらのパラメータは、0 ~ 255 の整数、または 16 進数の 0x00 ~ 0xFF です。 image で表される画像で使用される各色を作成するには、imagecolorallocate() を呼び出す必要があります。
------------------------------------------------- --------
bool imagefill (resource image, int x, int y, int color)
imagefill() は画像の座標 x, y の色で実行されます (画像の左上隅は0, 0) 領域の塗りつぶし (つまり、x、y 点と同じ色の点および隣接する点が塗りつぶされます)。
------------------------------------------------- --------
bool imageline ( resource image, int x1, int y1, int x2, int y2, int color )
imageline() は、イメージ image 内の座標 x1, y1 から x2, y2 までのカラー color を使用します(画像の左上が0,0) 線分を描きます。
------------------------------------------------- --------
bool imagestring (リソース画像、int font、int x、int y、string s、int col)
imagestring() は、col color を使用して、 image で表される画像の x に文字列 s を描画します。 y 座標 (これは文字列の左上隅の座標であり、画像全体の左上隅は 0, 0 です)。フォントが 1、2、3、4、または 5 の場合は、内蔵フォントが使用されます。
------------------------------------------------- --------
array imagettftext (リソース画像、float サイズ、float 角度、int x、int y、int color、string fontfile、string text)
この関数はより重要であり、多くのパラメーターがあるため、ここでは説明しませんが、主に画像に単語を書き込みます。上記の関数と似ていますが、前者よりも強力です。 ----- -------------------------------
bool imagefilltoborder ( リソース画像、int x、int y、int border, int color )
imagefilltoborder() は、x, y (画像の左上隅が 0, 0) 点から開始され、色の境界線に達するまで色で領域を塗りつぶします。 [注: 境界線内のすべての色が塗りつぶされます。指定した境界線の色がポイントと同じ場合、塗りつぶしはありません。画像に境界線の色が存在しない場合は、画像全体が塗りつぶされます。 】
------------------------------------------------
bool imagefilledellipse ( resource image, int cx, int cy, int w, int h, int color )
imagefilledellipse() 画像内に cx, cy (画像の左上隅が 0, 0) を中心とした画像を描画します楕円形のイメージで表されます。 w と h はそれぞれ楕円の幅と高さを指定します。楕円は色で塗りつぶされます。成功した場合は TRUE、失敗した場合は FALSE を返します。
================================================ ===
出力画像データ: imagepng($image[,$filename])
=============================== ===== ====================
例 1: 青い背景と交差した白い線のあるグラフィックを出力します
$width=35; $height=35 ;
//オブジェクトを作成
$image=imagecreate($width,$height);
//色を抽出
$color_white=imagecolorallocate($image,255,255,255);//白
$color_blue=imagecolorallocate($) image,0, 0,108);//Blue
imagefill($image,0,0,$color_blue)
//描画
//線幅
imagesetthickness($image,3); 0, $width,$height ,$color_white);
imageline($image,$width,0,0,$height ,$color_white);
// オブジェクトをヘッダーに送信します
header('content-type:image /png') ;
imagepng($image);
/*
//オブジェクトをファイルに送信します
$filename="ex1.png";オブジェクトを破棄します
imagedestroy($ image);
?>
出力画像:
オンライン デモンストレーション: http://www.phzzy.org/temp/5do8/ex1.php
例 2: 陰陽図
< ?php
$width=400;
$height=400;
$image=imagecreatetruecolor($width,$height);
//カラーを抽出する
$color_black=imagecolorallocate($image,0,2,0);//
$color_white=imagecolorallocate($image, 255,255,255);//ホワイト
$color_blue=imagecolorallocate($image,0,0,108);//ブルー
$color_red=imagecolorallocate($image,151,0,4);//赤
$color_my=imagecolorallocate($ image,192,192,255);//背景
$color_temp=imagecolorallocate($image,199,199,199);//背景
//描画
imagefill($image,0,0,$color_white); //最初の円は大きな円
imagefilledarc ($image,$width/2,$height/2,$height,$height,0,360,$color_blue,IMG_ARC_PIE)
//2 つの小さな円
imagefilledellipse ($image); ,$width/2,$height /4 ,$height/2,$height/2,$color_red);
imagefilledellipse ($image,$width/2,$height/4 * 3,$height/2,$height); /2,$color_blue);
/*imagefilledellipse -- 楕円を描いて塗りつぶす*/
imagefilledellipse ($image,$width/2,$height/2,$height,$height,-90,90,$color_red) ,IMG_ARC_PIE);
imagefilledellipse ($image ,$width/2,$height/4 * 3,$height/2,$height/2,$color_blue);
//ヘッダーにオブジェクトを送信する
header('content -type:image/png');
imagepng ($image)
/*
//オブジェクトをファイルに送信します
$filename="ex1.png"; /
//オブジェクトを破棄します
imagedestroy($image);
デモ:
http://www.phzzy.org/temp/5do8/ex2.php
例 3: 3D 画像 - クール
< ;?php
$width=400;
$height=400 ;
$image = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($image, 0xFF, 0xFF); $image, 0xC0, 0xC0, 0xC0);
$darkgray = imagecolorallocate($image, 0x90, 0x90, 0x90);
$darknavy = imagecolorallocate($image) , 0x00, 0x00, 0x50);
$red = imagecolorallocate($image, 0xFF, 0x00, 0x00);
imagefill($image,0x00, $white);
// 3D 効果を作成します
for ( $i = $height /2 +20; $i > $height /2; $i--) {
imagefilledarc($image, $width/2, $i, $width/2, $height /2, 0 , 45, $darknavy, IMG_ARC_PIE);
imagefilledarc($image, $width/2, $i, $width/2, $height /2, 45, 75 , $darkgray, IMG_ARC_PIE);
imagefilledarc($image, $width/2, $i, $width/2, $height /2, 75, 360 , $darkred, IMG_ARC_PIE);
imagefilledarc($image, $width/2, $height /2, $width/2, $height /2, 0, 45, $navy, IMG_ARC_PIE);
imagefilledarc($image, $width/2, $height / 2, $width/2, $height /2, 45, 75 , $gray, IMG_ARC_PIE);
imagefilledarc($image, $width/2, $height /2, $width/2, $height /2, 75, 360, $red, IMG_ARC_PIE);
// フラッシュ画像
header('Content-type: image/png');
imagedestroy($image);ファイル
$filename="ex1.png";
imagepng($image,$filename);
出力:
デモ: http://www.phzzy.org/temp/5do8/ex3。 php
例 4: 単純な検証コード
PHP で検証コードを作成するのは非常に簡単です。簡単なアイデアは次のとおりです:
ランダムなシードを生成し、ランダムな文字を抽出し、グラフィックスに接続します。色覚異常を防ぐために、色をランダムに抽出することも、カスタマイズすることもできます。
$width=65; BNM」 ;
$image=imagecreate ($width,$height);
$colorarrs=array(
imagecolorallocate($image,255,255,255),//白
imagecolorallocate($image,0 ,0 , 0)//黒
);
unset($sessionval) ;
imagesetthickness($image,3);
//文字列の数をランダムに取得する
$strsize=rand(3,5); ]);
// 文字列を 1 つずつ画像に書き込みます
for($i<$strsize;$i++){
$sessionval .=$sourcestrings; [$i_temp];
$fontcolor=imagecolorallocate($image,rand(0,255),rand(0,255));
$y_i = $height/2 + $font_size /3 ; 5, 1+ $i * $width /$strsize,5,$sourcestrings[$i_temp],$fontcolor);
}
//セッションに書き込み、後で
unset($_SESSION['cjjer']); で検証します。
$_SESSION['cjjer '] = $sessionval;
//ノイズを追加
for($i=0;$i{ $i_x=rand(0,$width) );
$i_y =rand(0,$height);
$pixelcolor=imagecolorallocate($image,rand(0,255),rand(0,255)); ,$pixelcolor);
header('content-type:image/png');
imagedestroy($image);
オンライン デモ: //www.phzzy.org/temp/5do8/ex4_login.php
生成された画像が十分に明るくないため、多くのユーザーがはっきりと見えないという明らかな問題があります。自分でいくつかの明るい色を設定してから出力しましょう。 colorarrs 配列を拡張します:
$colorarrs=array(
imagecolorallocate($image,255,255,255),
imagecolorallocate($image,0,0,0),
imagecolorallocate ($image ,92,0,12),
imagecolorallocate($image,0,0,128),
imagecolorallocate($image,233,10,216)
); 次に、23 行目を (17 行目) に変更します。 $colorarrs [rand(1,count($colorarrs)-1)];
出力:
オンラインデモ: http://www.phzzy.org/temp/5do8/ex5_login.php
例 5: 大規模な比較クール検証コード
PS 画像はまだ比較的小さい場合があります (クールに演出するための個人サイト、私だけ、スタイルを変えてユーザーを引き付けるための商用サイト、Google だけ、詳細は後ほど) により、検証コードは 12 ピクセルに制限されません。制限は 200 を超える場合がありますが、現時点では問題はありません。解決策の 1 つは、以前に生成された小さな画像を強制的に大きくすることです。はい、十分に滑らかに見えないのは事実です。他のことは言うまでもなく、ブロードバンドはもはや最も重要な問題ではありません。ここでは、さらに見栄えの良い生成方法をいくつか紹介します。
$width=600; ;
if( $height < $width /6)
$height=$width / 4;
$sourcestrings="0123456789aqwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
$image=imagecreate($width,$height);
$ white=imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$white);
$fonts= dirname(__FILE__);
putenv('"gdfontpath=".$ fonts=."" ');
$fontname='arial';
$font_size=floor($height / 2);
unset($sessionval); );
for( $i=0;$i$i_temp=rand(1,62);
$x_i =$font_size + $i *$width / ($strsize+1);
$y_i = $height / 2;
$fontcolor_a=imagecolorallocate($image,rand(0,255),rand(0,255); ,rand(0,255) );
imageTTFText($image,$font_size,$angle_i,$x_i,$y_i,$fontcolor_a,$fontname,$sourcestrings[$i_temp])
}
unset($_SESSION['cjjer') ]);
$ _SESSION['cjjer'] = $sessionval;
//ノイズポイントの数
for($i=0;$i{
$i_x= rand(0,$width );
$i_y=rand(0,$height);
imagesetpixel($image,$i_x,$i_y,imagecolorallocate($image,rand(0,255),rand(0,2550),rand) (0,255)));
//オブジェクト
header('content-type:image/png');
imagedestroy($image);
オンライン テスト: http://www.phzzy. org/temp/5do8/ex6_login.php
説明:
最初の幅と高さは、まだランダムに抽出された文字がいくつかあります:
オブジェクトを作成し、白で塗りつぶします:
$image=imagecreate($width,$height);
imagefill($image,0,0,$white);必要な確認コードをロードします フォント:
$fonts= dirname(__FILE__);//現在のルート ディレクトリに戻り、ここにフォント ファイルをコピーします。フォント ファイルは *.ttf ファイルです
putenv('"gdfontpath=. $fonts=.""');
$fontname='arial'
文字の高さを定義します。ここでは高さの半分に設定します。
$font_size=floor($height / 2);生成する文字数をランダムに設定します:
unset( $sessionval);
$strsize=rand(5,8);
ループ、文字を 1 つずつ入力します:
このループの文字列を取得し、追加します。変数の後ろに追加して後でセッションに書き込みます
$i_temp=rand (1,62);
$sessionval .=$sourcestrings[$i_temp];
画像に書き込まれた文字列の位置を取得します (x 座標と y 座標)
$x_i =$font_size + $i *$width / ($strsize +1);
$y_i = $height / 2;
正面から見た傾きを設定します
$angle_i=rand(-120,120);色を生成します,
$fontcolor_a=imagecolorallocate($image,rand (0,255),rand(0,255),rand(0,255));
画像に書き込みます
imageTTFText($image,$font_size,$angle_i,$x_i,$y_i); ,$fontcolor_a,$fontname,$sourcestrings[$i_temp ]);
この関数について質問がある場合は、関連する情報を確認してください。
登録コードを使用してください:
$_SESSION['cjjer']);
$_SESSION['cjjer'] = $sessionval;
ノイズポイントの追加:
//ノイズポイントの数
for($i=0;$i<$width * $height / 100;$i++)
{
$i_x=rand(0,$width) ;
$i_y=rand(0,$height)
imagesetpixel($image,$i_x,$i_y,imagecolorallocate($image,rand); 0,255),ランド(0,2550),ランド(0,255)));
ヘッダーへの出力:
header('content-type:image/png');//この行は、デフォルトで出力できる png 画像であることを示しますが、ヘッダー形式ではありません。画像の
imagepng($image);
imagedestroy ($image);
独自のフォント ライブラリをロードし、回転角度を設定できます $angle_i=rand(-120,120); フォントの高さを設定します $font_size=floor($height) / 2); フォントの色 $fontcolor_a と乱数 Number: $strsize=rand(5,8);
例 6: 画像に透かしを入れてサムネイルを生成する
従来の ASP ページの透かしとサムネイルの生成は比較的面倒です。他のコンポーネントなどもありますが、ご想像のとおり、PHP ではこれらのことを 30 行未満のプログラムで簡単に実行できます。
$source="my. jpg";
$zoom=0.5;
$str='私はイケメンです、あなたはMMですか?';
$image=imagecreatefromjpeg($source);
$width=imagesx($image);
$height= imagey($image );
$color_red=imagecolorallocate($image,111,0,0);//赤
$font=dirname(__FILE__). "//simsun.ttc"; ','UTF -8',$str);
$angle=25;
$fromy=$height/2; ,$angle, $fromx,$fromy,$color_red,$font,$str);
$width_temp=imagesx($image) * $zoom;
$height_temp=imagesy($image) * $zoom; imagecreatetruecolor($width_temp ,$height_temp);
imagecopyresize ($img,$image,0,0,0,0,$width_temp, $height_temp,$width,$height);
$file_zoomname= "my_zoom_jpeg.jpg ";
imagejpeg($img,$file_zoomname);
imagedestroy($img); > そして、png は 76k 必要なので、
コード分析:
ここでいくつかのパラメーターを設定します。 :
$source="my.jpg"; //ソース画像
$zoom=0.5 ; //倍率パーセンテージ
$str='私はイケメンですが、あなたは女の子ですか?' //ウォーターマークテキスト
画像 (透かしなし、読み込みなし):
$image=imagecreatefromjpeg($source);
長さと幅のサイズを取得:
$height=imagesy($image);ウォーターマーク フォントは中国語を使用しているため、中国語のフォント ライブラリをインポートする必要があります。そうしないと、書き込みが不可能になるか、コードが文字化けします。その後、文字列エンコーディングを変換する必要があります
$font=dirname(__FILE__) "// simsun.ttc";
$str=iconv('GB2312','UTF-8',$str);
開始点、フォントサイズ、視野角を設定し、文字列を書き込みます:
$fontsize=30;
$角度=25;
$fromx=$width/5;
imagettftext($image,$fontsize,$angle,$fromx,$fromy,$font,$str);
ズーム サイズの要件に従って新しいサイズのオブジェクトを生成します:
$width_temp=imagesx($image) * $zoom;
$height_temp=imagesy($ image) * $zoom;
$img=imagecreatetruecolor($width_temp,$height_temp) ;
ソース画像を新しい画像にコピーすると、gd ライブラリの imagecopyresize が自動的にサイズを調整します
imagecopyresize ($img,$image,0,0,0 ,0,$width_temp, $height_temp,$width,$height) ;
小さな画像を生成し、オブジェクトをクリアします:
$file_zoomname="my_zoom_jpeg.jpg";
imagedestroy($img);透かしのコア技術。
http://www.bkjia.com/PHPjc/320185.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/320185.html
技術記事
次の方法は 1 つの方法です。 if(!function_exists('imagecreate')) { die('このサーバーは GD モジュールをサポートしていません') } サポートされていない場合は、その dll ファイルをダウンロードします。 gd モジュールを変更し、php.. .