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


PHP image creation - problems with opacity

我需要正确设置不透明度的帮助。基本上,我有一个带有特定用户定义颜色的横幅(矩形)。在这上面,我想插入一个旗帜的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图像在旗帜周围是透明的。

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