我需要帮助正确设置不透明度。基本上,我有一个具有特定用户定义颜色的横幅(矩形)。在那之上我想插入一个标志的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图像在旗帜周围透明,你也可以看到旗帜被白色背景包围......
答案 0 :(得分:2)
使用imagecreatetruecolor()
代替imagecreate()
。
虽然php文档对此非常不清楚,但imagecreatetruecolor()
会创建一个RGBA图像,这对于具有Alpha透明度是必要的。
PHP文档 http://php.net/manual/en/function.imagecreatetruecolor.php
颜色索引是32位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;
}