繁体   English   中英

PHP + GD:imagecopymerge不保留PNG透明胶片

[英]PHP+GD: imagecopymerge not retaining PNG transparencies

我有两个PNG文件:“ red.png”和“ blue.png”; 它们大部分都是透明的,但是在不同的地方都有一些红色或蓝色斑点。

我想制作一个将两者合并的PHP脚本; 它应该像这样简单:

$original = getPNG('red.png');
$overlay = getPNG('blue.png');

imagecopymerge($original, $overlay, 0,0, 0,0, imagesx($original), imagesy($original),   100);
header('Content-Type: image/png');
imagepng($original);

当我运行此脚本时,我得到的只是蓝点-失去了透明度。 我看到我应该添加以下内容:

imagealphablending($original, false);
imagesavealpha($original, true);

(在原始图像和覆盖图像上?)这似乎没有任何帮助。

我在PHP.net上看到了一些变通办法,其中包括:

$throwAway = imagecreatefrompng($filename);
imagealphablending($throwAway, false);
imagesavealpha($throwAway, true);
$dstImage = imagecreatetruecolor(imagesx($throwAway), imagesy($throwAway));
imagecopyresampled($dstImage, $throwAway,0,0,0,0, imagesx($throwAway),     imagesy($throwAway),          imagesx($throwAway), imagesy($throwAway));

,应将PNG转换为“真彩色”图像并保持透明度。 它似乎确实可以这样做,但是现在我所看到的只是黑色背景上的蓝色。

我该怎么办?!

这对我来说非常合适:

$img1 = imagecreatefrompng('red.png');
$img2 = imagecreatefrompng('blue.png');

$x1 = imagesx($img1);
$y1 = imagesy($img1);
$x2 = imagesx($img2);
$y2 = imagesy($img2);

imagecopyresampled(
    $img1, $img2,
    0, 0, 0, 0,
    $x1, $y1,
    $x2, $y2);

imagepng($img1, 'merged.png', 0);

PHP版本5.3.2
GD 2.0版
libPNG版本1.2.42

您是否尝试过将图像保存到文件并进行检查?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM