使用PHP中的gd库为gif提供更好的图像质量

时间:2010-06-22 08:17:00

标签: php gd gif

我使用带有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);

结果如下:

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

谢谢

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

  

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

可悲的是,GD的TrueType字体渲染功能并不好。

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

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

答案 2 :(得分:0)

尝试使用imagecreatetruecolor代替imagecreate。