我使用带有gd库的文本创建了一个透明的gif,但Text的输出质量并不好。有谁知道如何才能提高质量?
以下是代码:
$req = explode('|', $_REQUEST['r']);
$text = $req[0];
header ("Content-type: image/gif");
$font = getFont($req[2]);
$font_size = $req[1];
$tmpcolor = getColor($req[3]);
$tmp_image=@imagecreatefromgif('gfx/transparent.gif');
$width = imagesx($tmp_image);
$height = imagesy($tmp_image);
//calculate the new width / height
$tmp = imagettfbbox($font_size,0,$font,$text);
$new_width = $tmp[2]+10;
$new_height = $font_size+5;
$new_image = imagecreate($new_width,$new_height);
ImageCopyResized($new_image, $tmp_image,0,0,0,0, $new_width, $new_height, $width, $height);
$black = ImageColorAllocate($new_image, 0, 0,0);
$trans = ImageColortransparent($new_image,$black);
$color = ImageColorAllocate($new_image, trim($tmpcolor[0]), trim($tmpcolor[1]), trim($tmpcolor[2]));
imagettftext($new_image, $font_size, 0, 0, $font_size, $color, $font, $text);
//Grab new image
imagegif($new_image);
imagedestroy($new_image);
imagedestroy($tmp_image);
结果如下:
谢谢
答案 0 :(得分:2)
GIF格式仅支持1位透明度(因此像素是透明或不透明的),因此您的文字具有锯齿状边缘。要获得平滑的边缘,请使用PNG格式(具有8位alpha通道,这意味着256级半透明),使用不带透明度的GIF(即在不透明背景上)。
答案 1 :(得分:1)
其他回答者指出,这可能是一个简单的透明度问题,而不是TrueType渲染问题。首先尝试这些建议,因为他们可能已经解决了手头的问题。
可悲的是,GD的TrueType字体渲染功能并不好。
首先尝试imageFTText()
系列函数。它们依赖于质量更好的外部FreeType库,并且还比TTF函数更好地尊重TrueType字体中的字距调整信息(特定字符对之间的单独距离,使文本看起来规则)。
如果这不起作用,请使用Imagemagick,根据我的经验,这远远优于GD提供的任何内容。
答案 2 :(得分:0)
尝试使用imagecreatetruecolor代替imagecreate。