产生黑边我有这样的代码:PHP的imagettftext透明背景
$im = imagecreatetruecolor(70, 25);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($im, imagecolorallocate($im, 0,0,0));
$font = 'font.ttf';
imagettftext($im, 20, 0, 3, 22, $white, $font, $randomnr);
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header ("Content-type: image/png");
imagepng($im);
imagedestroy($im);
就像我在标题中说,它创建文本周围的一些黑边。 我也试图与imagealphablending
/imagesavealpha
和我有同样的结果(我用透明背景的白色文本,以便你可以看到我说的):
更新:解决办法是:
$im = imagecreatetruecolor(70, 25);
$font = 'font.ttf';
//antialiasing:
$almostblack = imagecolorallocate($im,254,254,254);
imagefill($im,0,0,$almostblack);
$black = imagecolorallocate($im,0,0,0);
imagecolortransparent($im,$almostblack);
imagettftext($im, 20, 0, 3, 22, $white, $font, $randomnr);
...
是的,我认为这开启抗锯齿的问题......是一个疗法的方式来解决这个问题?我想黑色是透明的。正如我在图像中说的是一个透明的bg,上面有白色文字,所以图像应该是完全白色的。 – Sp3ct3R
您可以尝试先用透明色填充图像。另外,当你创建输出图像时,确保它有一个8位的alpha通道。 – hakre
如何用8位alpha输出? – Sp3ct3R