画像処理にPHPのGDライブラリを使用する場合、白または黒を入力する代わりにPNG画像を生成するときにバックグラウンドを透過的にするなど、画像の透明な背景を設定する必要がある場合があります。この効果を達成するために、主に2つの関数を使用できます: imagecolorallocatealpha()とimagefill() 。
この記事では、これら2つの機能を使用し、完全なサンプルコードを提供する方法を詳細に説明します。
int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
この関数は、指定された画像に色を割り当て、透明度を設定するために使用されます。
$ red、$ green、$ Blue :RGBカラー値(0-255)
$ alpha :透明度値(0は完全に不透明で、127は完全に透明です)
返された値は色識別子であり、 ImageFill()などの関数で使用できます。
bool imagefill ( resource $image , int $x , int $y , int $color )
この関数は、指定された色で画像を埋めるために使用されます。
$ x、$ y :開始点の座標に記入してください
$ COLOR :使用する色識別子
ImageColorallocatealpha()と組み合わせて、キャンバス全体を透明な色で満たすことができます。
以下は、GDライブラリを使用して透明な背景を持つ200x200 PNG画像を生成し、中央に赤い円を描く方法を示す完全なPHPコードです。
<?php
// aを作成します 200x200 本当の色の画像
$width = 200;
$height = 200;
$image = imagecreatetruecolor($width, $height);
// 色混合モードをオフにします,保存を有効にします alpha チャネル情報
imagealphablending($image, false);
imagesavealpha($image, true);
// 完全に透明な色を割り当てます
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
// キャンバス全体を透明な色で満たします
imagefill($image, 0, 0, $transparent);
// 赤を割り当てます(不透明)
$red = imagecolorallocate($image, 255, 0, 0);
// 真ん中に赤い円を描きます
imagefilledellipse($image, $width / 2, $height / 2, 100, 100, $red);
// 出力画像はです PNG
header('Content-Type: image/png');
imagepng($image);
// 無料のメモリ
imagedestroy($image);
?>
1 ??画像リソースを作成<BR> ImageCreatetrueColor()を使用して、真の色のキャンバスを作成します。
2 ??透明な背景を有効にします
GDはデフォルトでアルファ情報を保存せず、次のことが必要です。
imagealphablending($image, false);
imagesavealpha($image, true);
3 ??透明な色を割り当てて埋めます<br> ImageColorallocatealpha()を使用して、完全に透明な色(Alpha = 127)を作成し、 ImageFill()を使用してキャンバス全体を埋めます。
4 ??コンテンツを描く<br> ここでは、テキスト、行、写真などに変更できます。
5 ??出力画像<BR> Header( 'Content-Type:Image/PNG')を使用して出力タイプを設定し、 ImagePng()を使用してブラウザに出力するか、ファイル名を渡してディスクに保存します。たとえば
imagepng($image, '/path/to/save/output.png');
?ファイルに保存<br> 画像をサーバーに保存したい場合は、これを行うことができます。
imagepng($image, 'https://m66.net/images/output.png');
? GIFに切り替えます
GIFは透明な背景もサポートしていますが、透明な実装方法は異なります。 ImageColorTransparent()を使用できます。
?許可に注意してください<br> サーバーディレクトリに保存するときは、PHPプロセスに書き込みアクセス許可があることを確認してください。