1

これが可能かどうかはわかりません。

私は2つの画像を持っています。1つの画像はカラーグラデーションで、もう1つの画像はテクスチャ付きの透明な画像です。グラデーション画像で2番目の画像のテクスチャを塗りつぶしたい。Google で検索して同じ例を試してみましたが、解決策が見つかりませんでした。

透過テクスチャ画像:

透過テクスチャ画像

グラデーションカラー画像:

グラデーションカラー画像

最終イメージ:

最終イメージ

最終的な画像の黒い背景は無視してください。

4

1 に答える 1

0

これはあなたがそれを行う方法です:

<?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;
}

?>

出力:

ここに画像の説明を入力

于 2013-11-12T10:55:15.813 に答える