imagecreatefrompng() png透明部分为黑色
imagecreatefrompng() transparent part of png is black
我正在使用 PHP 创建海报,我想在海报上添加数字。
我使用以下代码添加它们:
$src1 = imagecreatefrompng("m2.png");
$widthsrc=0;
$heightsrc=0;
list($widthsrc, $heightsrc, $typesrc, $attrsrc) = getimagesize("m2.png");
$background = imagecolorallocate($src1, 0, 0, 0);
imagecolortransparent($src1, $background);
imagealphablending($src1, false);
imagesavealpha($src1, true);
imagecopyresampled($my_img,$src1,$line2X1+100*$resize,$line2Y1,0,0,1000*$resize,1000*$resize,$widthsrc,$heightsrc);
问题是图形应该透明的地方是黑色的。
我已经看过以下帖子:
- imagecreatefrompng-makes-a-black-background-instead-of-transparent
- hp-resizing-png-images-generate-black-background
- png-has-black-background
但我无法创建适合我的解决方案。
好吧,这很容易 XD 将评论转换为答案:
您的错误在于定义背景颜色。你应该使用这个:
$background = imagecolorallocatealpha($src,0,0,0,127);
但是,为了安全起见,避免使用图片中已经存在的 "transparent" 颜色可能是个好主意。 "traditional" 旧的基于 sprite 的游戏的透明颜色是洋红色,因为您的图像上不太可能有纯洋红色!
$background = imagecolorallocatealpha($src,255,0,255,127);
我正在使用 PHP 创建海报,我想在海报上添加数字。
我使用以下代码添加它们:
$src1 = imagecreatefrompng("m2.png");
$widthsrc=0;
$heightsrc=0;
list($widthsrc, $heightsrc, $typesrc, $attrsrc) = getimagesize("m2.png");
$background = imagecolorallocate($src1, 0, 0, 0);
imagecolortransparent($src1, $background);
imagealphablending($src1, false);
imagesavealpha($src1, true);
imagecopyresampled($my_img,$src1,$line2X1+100*$resize,$line2Y1,0,0,1000*$resize,1000*$resize,$widthsrc,$heightsrc);
问题是图形应该透明的地方是黑色的。
我已经看过以下帖子:
- imagecreatefrompng-makes-a-black-background-instead-of-transparent
- hp-resizing-png-images-generate-black-background
- png-has-black-background
但我无法创建适合我的解决方案。
好吧,这很容易 XD 将评论转换为答案:
您的错误在于定义背景颜色。你应该使用这个:
$background = imagecolorallocatealpha($src,0,0,0,127);
但是,为了安全起见,避免使用图片中已经存在的 "transparent" 颜色可能是个好主意。 "traditional" 旧的基于 sprite 的游戏的透明颜色是洋红色,因为您的图像上不太可能有纯洋红色!
$background = imagecolorallocatealpha($src,255,0,255,127);