これが可能かどうかはわかりません。
私は2つの画像を持っています。1つの画像はカラーグラデーションで、もう1つの画像はテクスチャ付きの透明な画像です。グラデーション画像で2番目の画像のテクスチャを塗りつぶしたい。Google で検索して同じ例を試してみましたが、解決策が見つかりませんでした。
透過テクスチャ画像:
グラデーションカラー画像:
最終イメージ:
最終的な画像の黒い背景は無視してください。
これはあなたがそれを行う方法です:
<?php
$img1 = imagecreatefrompng('1.png');
$img2 = imagecreatefrompng('2.png');
$imgFinal = alphaOverlay($img1, $img2, 181, 181);
header('Content-Type: image/png');
imagepng($imgFinal);
imagedestroy($img1);
imagedestroy($img2);
imagedestroy($imgFinal);
function alphaOverlay($destImg, $overlayImg, $imgW, $imgH)
{
for($y=0;$y<$imgH;$y++)
{
for($x=0;$x<$imgW;$x++)
{
$ovrARGB = imagecolorat($overlayImg, $x, $y);
$ovrA = ($ovrARGB >> 24) << 1;
$ovrR = $ovrARGB >> 16 & 0xFF;
$ovrG = $ovrARGB >> 8 & 0xFF;
$ovrB = $ovrARGB & 0xFF;
$change = false;
if($ovrA == 0)
{
$dstR = $ovrR;
$dstG = $ovrG;
$dstB = $ovrB;
$change = true;
}
elseif($ovrA < 254)
{
$dstARGB = imagecolorat($destImg, $x, $y);
$dstR = $dstARGB >> 16 & 0xFF;
$dstG = $dstARGB >> 8 & 0xFF;
$dstB = $dstARGB & 0xFF;
$dstR = (($ovrR * (0xFF-$ovrA)) >> 8) + (($dstR * $ovrA) >> 8);
$dstG = (($ovrG * (0xFF-$ovrA)) >> 8) + (($dstG * $ovrA) >> 8);
$dstB = (($ovrB * (0xFF-$ovrA)) >> 8) + (($dstB * $ovrA) >> 8);
$change = true;
}
if($change)
{
$dstRGB = imagecolorallocatealpha($destImg, $dstR, $dstG, $dstB, 0);
imagesetpixel($destImg, $x, $y, $dstRGB);
}
}
}
return $destImg;
}
?>
出力: