简体   繁体   中英

better image quality for gif with gd library in PHP

I create a transparent gif with text with the gd library but the output quality of the Text isn't good. Has anybody an idea how can I improve the quality?

Here is the code:

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

Here is the result:

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

Thank you

GIF format supports only 1-bit transparency (so pixel is either transpatent or opaque), so your text has jagged edges. To get smooth edges, use PNG format (which has 8-bit alpha channel, which means 256 levels of translucency), use GIF without transparency (ie on opaque background).

Other answerers point out that this could be a simple transparency issue rather than a TrueType rendering one. Try those suggestions first, as they may already remedy the problem at hand.

Sadly, GD's TrueType font rendering capabilities are not great.

  • Try the imageFTText() family of functions first. They rely on the external FreeType library which is better in quality, and also respects the kerning information in TrueType fonts (the individual distances between specific pairs of characters that make text look regular) better than the TTF functions.

  • If that doesn't work, use Imagemagick which in my experience is far superior to anything GD has to offer.

尝试使用imagecreatetruecolor代替imagecreate。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM