0

I got good result in PHP/GD to write text to image template, text wraps fine but is not "smooth", here is the code I am using:

<?php

header("Content-type: image/png");

$text = "go to school go to school go to school go to school go to school go to school go to school go to school go to school go to school go to school ";
$arrText=explode("\n",wordwrap($text,60,"\n"));

$im = imagecreatefrompng("template.png");
$y = 15; //vertical position of text
foreach($arrText as $arr)
{
    $white = imagecolorallocate($im,0,0,0); //sets text color
    imagestring($im,5,15,$y,trim($arr),$white); //create the text string for image,added     trim() to remove unwanted chars
    $y = $y+20;

}
imagepng($im);
imagedestroy($im);
?>
7
  • 1
    Any chance you can add an image of the current result? Commented Aug 7, 2012 at 17:26
  • Define smooth. When "wordwrap" is called it makes a hard break at 60, or n, characters. Commented Aug 7, 2012 at 17:32
  • What is the question? Are you asking how to make the text "smooth"? Commented Aug 7, 2012 at 17:32
  • @Vulcan, I am not able to post pictures coz I am new user. Commented Aug 7, 2012 at 17:38
  • @davidethell yes I mean antialias. Commented Aug 7, 2012 at 17:38

2 Answers 2

2

Please try this:-

Remember : set correct path for font $font = 'arial.ttf';

    header('Content-type: image/png');

    // Create the image
    $im = imagecreatetruecolor(400, 30);

    // Create some colors
    $white = imagecolorallocate($im, 255, 255, 255);
    $grey = imagecolorallocate($im, 128, 128, 128);
    $black = imagecolorallocate($im, 0, 0, 0);
    imagefilledrectangle($im, 0, 0, 399, 29, $white);

    // The text to draw
    $text = 'go to school go to school go to school go to school go to school go to school go to school go to school go to school go to school go to school';

   // Replace path by your own font path
    $font = 'arial.ttf';

    // Add some shadow to the text
    imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

    // Add the text
    imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

    // Using imagepng() results in clearer text compared with imagejpeg()
    imagepng($im);
    imagedestroy($im);
Sign up to request clarification or add additional context in comments.

Comments

0

Try turning on anti-aliasing:

imageantialias($im, true);

Does that make it look any better?

Or else try imagettftext with a truetype font:

imagettftext ( $im, 15, 0, 15, $y, $white, 'fontfile.ttf', trim($arr));

3 Comments

Nothing happened, my text still not smooth.
Updated answer with true type font instead.
this was the correct solution, now I have my text antialias, thank you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.