I would like to find some code which taxes a string of text and makes an image out of it using a TTF font...
I found a function that creates a border around the text, which is what I wanted:
function imagettfborder($im, $size, $angle, $x, $y, $color, $font, $text, $width) {
// top
imagettftext($im, $size, $angle, $x-$width, $y-$width, $color, $font, $text);
imagettftext($im, $size, $angle, $x, $y-$width, $color, $font, $text);
imagettftext($im, $size, $angle, $x+$width, $y-$width, $color, $font, $text);
// bottom
imagettftext($im, $size, $angle, $x-$width, $y+$width, $color, $font, $text);
imagettftext($im, $size, $angle, $x, $y+$width, $color, $font, $text);
imagettftext($im, $size, $angle, $x-$width, $y+$width, $color, $font, $text);
// left
imagettftext($im, $size, $angle, $x-$width, $y, $color, $font, $text);
// right
imagettftext($im, $size, $angle, $x+$width, $y, $color, $font, $text);
for ($i = 1; $i < $width; $i++) {
// top line
imagettftext($im, $size, $angle, $x-$i, $y-$width, $color, $font, $text);
imagettftext($im, $size, $angle, $x+$i, $y-$width, $color, $font, $text);
// bottom line
imagettftext($im, $size, $angle, $x-$i, $y+$width, $color, $font, $text);
imagettftext($im, $size, $angle, $x+$i, $y+$width, $color, $font, $text);
// left line
imagettftext($im, $size, $angle, $x-$width, $y-$i, $color, $font, $text);
imagettftext($im, $size, $angle, $x-$width, $y+$i, $color, $font, $text);
// right line
imagettftext($im, $size, $angle, $x+$width, $y-$i, $color, $font, $text);
imagettftext($im, $size, $angle, $x+$width, $y+$i, $color, $font, $text);
}
}
// settings
$font = 'deftone_0.ttf';
$text = 'Stridulation Records';
// image
header("Content-type: image/png");
$im = imagecreate(400, 50);
// colors
$white = imagecolorallocate($im, 255, 255, 255);
//$white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$grey = imagecolorallocate($im, 175, 175, 175);
$blue = imagecolorallocate($im, 0, 0, 255);
// display text
imagettfborder($im, 20, 0, $border, 30, $black, $font, $text, 1);
imagettftext($im, 20, 0, $border, 30, $white, $font, $text);
// display image
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
However when you change the color of the font the color of the entire image created by imagecreate is created.
I moved on to another function I found online:
// settings
$font = 'deftone_0.ttf';
$text = 'Stridulation Records';
// image
header("Content-type: image/png");
$im = imagecreate(200, 50);
// colors
$white = imagecolorallocate($im, 255, 255, 255);
//$white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$grey = imagecolorallocate($im, 175, 175, 175);
$blue = imagecolorallocate($im, 0, 0, 255);
// display text
imagettfborder($im, 20, 0, $border, 30, $black, $font, $text, 1);
imagettftext($im, 20, 0, $border, 30, $white, $font, $text);
// display image
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
/*
/**
* Function for converting Text to Image.
* Kip CENTURY.TTF file in same folder.
*
* @author Taslim Mazumder Sohel
* @deprecated 1.0 - 2007/08/03
*
*/
//Example call.
$str = "New life in programming.\nNext Line of Image.\nLine Number 3\n" .
"This is line numbet 4\nLine number 5\nYou can write as you want.";
header("Content-type: image/gif");
imagegif(imagettfJustifytext($str,"deftone_0.ttf",2));
//End of example.
/**
* @name : makeImageF
*
* Function for create image from text with selected font. Justify text in image (0-Left, 1-Right, 2-Center).
*
* @param String $text : String to convert into the Image.
* @param String $font : Font name of the text. Kip font file in same folder.
* @param int $W : Width of the Image.
* @param int $H : Hight of the Image.
* @param int $X : x-coordinate of the text into the image.
* @param int $Y : y-coordinate of the text into the image.
* @param int $fsize : Font size of text.
* @param array $color : RGB color array for text color.
* @param array $bgcolor : RGB color array for background.
*
*/
function imagettfJustifytext($text, $font="arial.ttf", $Justify=2, $W=0, $H=0, $X=0, $Y=0, $fsize=22, $color=array(0x0,0x0,0x0), $bgcolor=array(0xFF,0xFF,0xFF)){
$angle = 0;
$L_R_C = $Justify;
$_bx = imageTTFBbox($fsize,0,$font,$text);
$W = ($W==0)?abs($_bx[2]-$_bx[0]):$W; //If Height not initialized by programmer then it will detect and assign perfect height.
$H = ($H==0)?abs($_bx[5]-$_bx[3]):$H; //If Width not initialized by programmer then it will detect and assign perfect width.
$im = @imagecreate($W, $H)
or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, $bgcolor[0], $bgcolor[1], $bgcolor[2]); //RGB color background.
$text_color = imagecolorallocate($im, $color[0], $color[1], $color[2]); //RGB color text.
$bg_color = imagecolorat($im,1,1);
imagecolortransparent($im, $bg_color);
if($L_R_C == 0){ //Justify Left
imagettftext($im, $fsize, $angle, $X, $fsize, $text_color, $font, $text);
}elseif($L_R_C == 1){ //Justify Right
$s = split("[\n]+", $text);
$__H=0;
foreach($s as $key=>$val){
$_b = imageTTFBbox($fsize,0,$font,$val);
$_W = abs($_b[2]-$_b[0]);
//Defining the X coordinate.
$_X = $W-$_W;
//Defining the Y coordinate.
$_H = abs($_b[5]-$_b[3]);
$__H += $_H;
imagettftext($im, $fsize, $angle, $_X, $__H, $text_color, $font, $val);
$__H += 6;
}
}
elseif($L_R_C == 2){ //Justify Center
$s = split("[\n]+", $text);
$__H=0;
foreach($s as $key=>$val){
$_b = imageTTFBbox($fsize,0,$font,$val);
$_W = abs($_b[2]-$_b[0]);
//Defining the X coordinate.
$_X = abs($W/2)-abs($_W/2);
//Defining the Y coordinate.
$_H = abs($_b[5]-$_b[3]);
$__H += $_H;
imagettftext($im, $fsize, $angle, $_X, $__H, $text_color, $font, $val);
$__H += 6;
}
}
return $im;
}
but I still don't understand how I can create a transparent background AROUND the text and how I can insert this into a php page, because when I do I get the "cannot modify header information, header already sent" error.
How can I create an image with a ttf font from a text string, have a border around it and transparent background around the image and place that image in an existing page output?
Thanks a lot