如何用纹理替换透明png图像的基色?

时间:2014-09-30 11:06:53

标签: php imagemagick png

有没有想过如何用纹理替换透明png图像的基色?

在此网址中:Php - replace base color of transparent png image

用另一种颜色替换颜色的一些代码......

代码:

function colorizeBasedOnAplhaChannnel( $file, $targetR, $targetG, $targetB, $targetName ) {

$im_src = imagecreatefrompng( $file );

$width = imagesx($im_src);
$height = imagesy($im_src);

$im_dst = imagecreatefrompng( $file );

// Note this:
// Let's reduce the number of colors in the image to ONE
imagefilledrectangle( $im_dst, 0, 0, $width, $height, 0xFFFFFF );

for( $x=0; $x<$width; $x++ ) {
    for( $y=0; $y<$height; $y++ ) {

        $alpha = ( imagecolorat( $im_src, $x, $y ) >> 24 & 0xFF );

        $col = imagecolorallocatealpha( $im_dst,
            $targetR - (int) ( 1.0 / 255.0  * $alpha * (double) $targetR ),
            $targetG - (int) ( 1.0 / 255.0  * $alpha * (double) $targetG ),
            $targetB - (int) ( 1.0 / 255.0  * $alpha * (double) $targetB ),
            $alpha
            );

        if ( false === $col ) {
            die( 'sorry, out of colors...' );
        }

        imagesetpixel( $im_dst, $x, $y, $col );

    }

}

imagepng( $im_dst, $targetName);
imagedestroy($im_dst);

}

unlink( dirname ( __FILE__ ) . '/newleaf.png' );
unlink( dirname ( __FILE__ ) . '/newleaf1.png' );
unlink( dirname ( __FILE__ ) . '/newleaf2.png' );

$img = dirname ( __FILE__ ) . '/leaf.png';
colorizeBasedOnAplhaChannnel( $img, 0, 0, 0xFF, 'newleaf1.png' );
colorizeBasedOnAplhaChannnel( $img, 0xFF, 0, 0xFF, 'newleaf2.png' );
?>

Original
<img src="leaf.png">
<br />
<img src="newleaf1.png">
<br />
<img src="newleaf2.png">

我的目标是用php或imagemagick替换带有纹理的png文件中创建的文本颜色...

1 个答案:

答案 0 :(得分:0)

我找到了一种方法:

我的方式: 例如,你有这个纹理:

enter image description here

您的文字是:“示例文字”, 你可以使用imagemagick创建这个文本,或者以我的方式创建波斯文本,所以我将文本更改为带有黑色背景和文本的PNG文件。

喜欢:

enter image description here

enter image description here

好的,那么你需要将这个图像文件与一些imagemagick代码合成,如:

exec(' convert ripple-overlay.png  text-mask.png -alpha Off  -compose CopyOpacity   -composite  result.png');

,您的结果将如下:

enter image description here

enter image description here

我希望这很有用。 最好的。