【PHP】imagealphablending()の動作を確認してみる
更新日:2023/08/25
PHPのimagealphablending()はマニュアルによると、イメージのブレンドモードを設定するようだ。
さらに詳しく説明されているが、よくわからない。
そこで、実際に使って検証しました。
第二引数がtrueの時
まずはimagealphablending()の第二引数にtrueを指定して、ブレンドモードを有効にして結果を確認してみます。
ちなみに、この引数のデフォルトはtrueです。
<?php
// TrueColorイメージを新規作成
$image = imagecreatetruecolor(300, 100);
imagealphablending($image, true);
imagesavealpha($image, true);
$bgColor = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $bgColor);
// 適当に描画
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledrectangle($image, 20, 20, 280, 80, $red);
$white = imagecolorallocatealpha($image, 255, 255, 255,50);
imagefilledrectangle($image, 30, 30, 270, 70, $white);
// ファイル出力
imagepng($image , 'output.png' );
// 画像を破棄
imagedestroy($image);
背景が緑の領域に、このコードを実行して作成された画像ファイルを表示すると次のようになります。
画像の周囲はcssで枠を表示しています。
コードは赤い四角の上に60%程度透過した白い四角を描画しています。
赤い四角を透過して、ピンクになっていますね。
第二引数がfalseの時
まずはimagealphablending()の第二引数にfalseを指定して、ブレンドモードを無効にしてみます。
コードは割愛します。
生成された画像を同じように表示すると、次のようになりました。
今度は赤ではなくて、緑を透過しています。
下絵(赤い四角)を無視して、上書きされたようです。
trueとfalseを交互に切り替える
最後に、ブレンドモードを交互に切り替えるとどうなるか確認してみます。
最初のコードの画像描画部分を、次のように変更しました。
// 適当に描画
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledrectangle($image, 20, 20, 280, 80, $red);
$white = imagecolorallocatealpha($image, 255, 255, 255,50);
imagealphablending($image, true); // ブレンドモードオン
imagefilledrectangle($image, 30, 30, 70, 70, $white);
imagealphablending($image, false); // ブレンドモードオフ
imagefilledrectangle($image, 80, 30, 120, 70, $white);
imagealphablending($image, true); // ブレンドモードオン
imagefilledrectangle($image, 130, 30, 170, 70, $white);
imagealphablending($image, false); // ブレンドモードオフ
imagefilledrectangle($image, 180, 30, 220, 70, $white);
結果は次のようになりました。
想定したとおりですね。
オン・オフにあわせて描画結果がかわるようです。
更新日:2023/08/25
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。