PHP图像创建 - 不透明度问题

时间:2015-07-18 22:56:17

标签: php html transparency

我需要帮助正确设置不透明度。基本上,我有一个具有特定用户定义颜色的横幅(矩形)。在那之上我想插入一个标志的png图像,这是一个圆形且具有透明背景。

然而,当我覆盖它们时,它们仍然显示白色背景,它应该是透明的。我尝试保存alpha并在stackoverflow上经历了几个线程,但没有任何效果......

这是我的代码:

$width = 800;
$height = 150;

$png_image = imagecreate($width, $height);
imagealphablending( $png_image, true );
imagesavealpha( $png_image, true );
$bg = imagecolorallocate($png_image, hex2rgb($color_schemes[$design]['900'])[0], hex2rgb($color_schemes[$design]['900'])[1], hex2rgb($color_schemes[$design]['900'])[2]);

$icon1 = imagecreatefrompng('../../imgs/flags/big/us.png');
imagealphablending( $icon1, true );
imagesavealpha( $icon1, true );
imagecopy($png_image, $icon1, 10, 10, 0, 0, 80, 80);

图像中还有其他一些东西,但这与此问题无关。以上结果如下: http://www.meteotemplate.com/template/plugins/banner/bannerCreate.php

即使PNG图像在旗帜周围透明,你也可以看到旗帜被白色背景包围......

1 个答案:

答案 0 :(得分:2)

使用imagecreatetruecolor()代替imagecreate()

虽然php文档对此非常不清楚,但imagecreatetruecolor()会创建一个RGBA图像,这对于具有Alpha透明度是必要的。

PHP文档 http://php.net/manual/en/function.imagecreatetruecolor.php

注意

颜色索引是32位ARGB,如果由于某种原因你决定直接创建它们而不是分配它们。这实际上很方便。

奖励:ARGB颜色功能

// return 32bit ARGB color index
// input red (0-255), green (0-255), blue(0-255), alpha (0-127)
function makeColor($r=0, $g=0, $b=0, $a=0) {
   return ($a << 24) + ($r << 16) + ($g << 8) + $b;
}