лучшее качество изображения для GIF с библиотекой GD в PHP - PullRequest
0 голосов
/ 22 июня 2010

Я создаю прозрачный GIF с текстом с помощью библиотеки GD, но качество вывода текста не очень хорошее. Кто-нибудь знает, как я могу улучшить качество?

Вот код:

$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 ]

2 голосов
/ 22 июня 2010

Формат GIF поддерживает только 1-битную прозрачность (поэтому пиксель либо прозрачный, либо непрозрачный), поэтому ваш текст имеет неровные края.Чтобы получить плавные края, используйте формат PNG (который имеет 8-битный альфа-канал, что означает 256 уровней прозрачности), используйте GIF без прозрачности (то есть на непрозрачном фоне).

1 голос
/ 22 июня 2010

Другие авторы отмечают, что это может быть простой проблемой прозрачности, а не рендеринга TrueType. Сначала попробуйте эти предложения, так как они уже могут решить проблему.

К сожалению, возможности рендеринга шрифтов TrueType в GD невелики.

  • Попробуйте сначала семейство функций imageFTText(). Они полагаются на внешнюю библиотеку FreeType, которая лучше по качеству, а также учитывает информацию о кернинге в шрифтах TrueType (отдельные расстояния между конкретными парами символов, которые делают текст регулярным) лучше, чем функции TTF.

  • Если это не сработает, используйте Imagemagick , что по моему опыту намного превосходит все, что GD может предложить.

0 голосов
/ 22 июня 2010

Попробуйте использовать imagecreatetruecolor вместо imagecreate.

...