簡體   English   中英

用另一個漸變圖像填充圖像

[英]fill image with another gradient image

我不知道這是否可行。

我有兩個圖像,一個圖像是顏色漸變,另一個圖像是帶有紋理的透明圖像。 我想用漸變圖像填充第二張圖像的紋理。 我已經在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;
}

?>

輸出:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM