ホームページ  >  記事  >  バックエンド開発  >  PHP はコードをコンパイルして動的な画像を作成します

PHP はコードをコンパイルして動的な画像を作成します

PHPz
PHPzオリジナル
2016-07-29 08:38:5652174ブラウズ

基本的なイメージ作成機能を使用する前に、GDライブラリファイルをインストールする必要があります。 JPEG 関連の画像作成機能を使用する場合は、jpeg-6b をインストールする必要があります。画像内で Type 1 フォントを使用する場合は、t1lib をインストールする必要があります。

イメージ作成環境をセットアップする前に、いくつかの準備を行う必要があります。まず、t1lib をインストールし、次に jpeg-6b をインストールし、次に GD ライブラリ ファイルをインストールします。インストール中は、GD をコンパイルしてライブラリに保存するときに jpeg-6b が使用されるため、ここで指定した順序でインストールする必要があります。jpeg-6b がインストールされていない場合、コンパイル中にエラーが発生します。

これら 3 つのコンポーネントをインストールした後も、PHP を再構成する必要があります。これが、PHP のインストールに DSO を使用してよい理由の 1 つです。 make clean を実行し、次の内容を現在の設定に追加します。

--with-gd=[/path/to/gd] 
--with-jpeg-dir=[/path/to/jpeg-6b] 
--with-t1lib=[/path/to/t1lib]

追加が完了したら、make コマンドを実行し、次に make install コマンドを実行します。Apache を再起動し、phpinfo() を実行して、新しい設定が反映されているかどうかを確認します。発効しました。これで、イメージの作成作業を開始できます。

インストールされている GD ライブラリ ファイルのバージョンに応じて、グラフィック ファイルを GIF または PNG 形式で作成できるかどうかが決まります。 gd-1.6 以前のバージョンをインストールした場合、GIF 形式のファイルは使用できますが、PNG ファイルは作成できません。 gd-1.6 以降のバージョンをインストールした場合、PNG ファイルは作成できますが、GIF 形式のファイルは作成できません。

簡単な画像を作成するには多くの機能を使用する必要がありますが、それについては順を追って説明します。

次の例では、PNG 形式で画像ファイルを作成します。次のコードは、作成された画像の MIME タイプを含むヘッダーです。

<? header ("Content-type: image/png");

ImageCreate() を使用して、空白の画像を表す変数を作成します。 ImageCreate(x_size, y_size) の形式で、ピクセル単位で画像のサイズを指定する引数が必要です。サイズ 250×250 の画像を作成したい場合は、次のステートメントを使用できます:

$newImg = ImageCreate(250,250);

画像はまだ空白なので、色で塗りつぶすこともできます。まず、ImageColorAllocate() 関数を使用して、RGB 値を使用してこの色に名前を割り当てる必要があります。この関数の形式は ImageColorAllocate([image], [red], [green], [blue]) です。空色を定義したい場合は、次のステートメントを使用できます:

$skyblue = ImageColorAllocate($newImg,136,193,255);

次に、ImageFill() 関数を使用して画像をこの色で塗りつぶす必要があります。 ImageFill() 関数には、ImageFillRectangle( など) のいくつかのバージョンがあります。 )、ImageFillPolygon() など。簡単にするために、次の形式で ImageFill() 関数を使用します:

ImageFill([image], [start x point], [start y point], [color]) 
ImageFill($newImg,0,0,$skyblue);

最後に、画像の作成後に画像ハンドルと占有メモリを解放します:

ImagePNG($newImg); 
ImageDestroy($newImg); ?>

このようにして、画像を作成するコード全体は次のようになります。

<? header ("Content-type: image/png"); 
$newImg = ImageCreate(250,250); 
$skyblue = ImageColorAllocate($newImg,136,193,255); 
ImageFill($newImg,0,0,$skyblue); 
ImagePNG($newImg); 
ImageDestroy($newImg); 
?>

このスクリプト ファイルを skyblue.php として保存し、ブラウザでアクセスすると、スカイブルーの 250×250 の PNG 形式の画像が表示されます。

画像作成機能を使用して、大きな画像を小さな画像に作成するなど、画像を処理することもできます。

画像があり、そこから 35×35 の画像を切り抜きたいとします。必要なのは、35×35 の空の画像を作成し、元の画像を含む画像ストリームを作成して、元の画像のサイズ変更したバージョンを新しい空の画像に配置することだけです。

このタスクを完了するための重要な関数は ImageCopyResize() で、次の形式が必要です: ImageCopyResize([新しい画像ハンドル],[元の画像ハンドル],[新しい画像 X], [新しい画像 Y], [ 元の画像 X ]、[元のイメージ Y]、[新しいイメージ X]、[新しいイメージ Y]、[元のイメージ X]、[元のイメージ Y])。

<? /*发送一个头部,以便让浏览器知道该文件所包含的内容类型*/ 
header("Content-type: image/png"); 
/*建立保存新图像高度和宽度的变量*/ 
$newWidth = 35; 
$newHeight = 35; 
/*建立给定高度和宽度的新的空白图像*/ 
$newImg = ImageCreate($newWidth,$newHeight); 
/*从原来较大的图像中得到数据*/ 
$origImg = ImageCreateFromPNG("test.png"); 
/*拷贝调整大小后的图像,使用ImageSX()、ImageSY()得到原来的图像在X、Y方面上的大小*/ 
ImageCopyResized($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg)); 
/*创建希望得到的图像,释放内存*/ 
ImagePNG($newImg); 
ImageDestroy($newImg); ?>

この小さなスクリプトを resize.php として保存し、ブラウザでアクセスすると、35×35 の PNG 形式の画像が表示されます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。