【问题标题】:better image quality for gif with gd library in PHP使用 PHP 中的 gd 库为 gif 提供更好的图像质量
【发布时间】:2011-03-06 16:53:30
【问题描述】:

我使用 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

谢谢

【问题讨论】:

    标签: php gd gif


    【解决方案1】:

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

    【讨论】:

    • +1 我读到他正在创建一个透明 GIF。如果没有锯齿状的边缘,这显然是行不通的。
    • 我需要透明背景,因为我会将文本设置在其他图像上。
    • 但是我怎样才能创建一个高质量的带有文本和透明背景的图像呢?
    • @apple 你想要做的事情是不可能使用 GIF 的。透明的 GIF 只能“淡化”为一种背景颜色值。它在图像上总是看起来参差不齐。您将需要使用 PNG 格式,但需要注意的是它需要解决方法才能在 IE6 中工作。
    • @Pekka 谢谢,我改成了 png,但结果并没有以前那么好。 :(
    【解决方案2】:

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

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

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

    • 如果这不起作用,请使用Imagemagick,根据我的经验,它比 GD 提供的任何东西都要好。

    【讨论】:

    • 我认为 imageFTText 不会改变任何东西,我不想使用像 imagemagick 这样的外部库。谢谢
    • @apple 是的,手头的问题是另一个问题,请参阅我在另一个答案中的评论。
    【解决方案3】:

    尝试使用 imagecreatetruecolor 代替 imagecreate。

    【讨论】:

    • imagecreatetruecolor 停止了我的输出并且它失去了文本输出。 :(
    • @apple 它不应该那样做。打开错误报告:error_reporting(E_ALL); 以查看问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2014-11-10
    • 2010-12-25
    相关资源
    最近更新 更多