0

我使用 gd 库创建了一个带有文本的透明 gif,但文本的输出质量不好。有人知道如何提高质量吗?

这是代码:

$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);

结果如下:

结果
http://desmond.yfrog.com/Himg691/scaled.php?tn=0&server=691&filename=createphp.gif&xsize=640&ysize=640

谢谢

4

3 回答 3

2

GIF 格式仅支持 1 位透明度(因此像素是透明的或不透明的),因此您的文本具有锯齿状边缘。要获得平滑的边缘,请使用 PNG 格式(具有 8 位 alpha 通道,这意味着 256 级半透明),使用不透明的 GIF(即在不透明背景上)。

于 2010-06-22T08:23:34.787 回答
1

其他回答者指出,这可能是一个简单的透明度问题,而不是 TrueType 渲染问题。首先尝试这些建议,因为它们可能已经解决了手头的问题。

遗憾的是,GD 的 TrueType 字体渲染能力不是很好。

  • 首先尝试imageFTText()函数族。它们依赖于质量更好的外部 FreeType 库,并且也比 TTF 函数更好地尊重 TrueType 字体中的字距调整信息(使文本看起来规则的特定字符对之间的单独距离)。

  • 如果这不起作用,请使用Imagemagick,根据我的经验,它远远优于 GD 提供的任何东西。

于 2010-06-22T08:22:05.550 回答
0

尝试使用imagecreatetruecolor而不是 imagecreate。

于 2010-06-22T08:17:57.510 回答