Creating Images
| From: | Chris Blake | Date: | Mon, 09 Jun 2003 13:44:35 +0000 |
| Subject: | Creating Images | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-150756@lists.php.net to get a copy of this message | ||
Greetings learned PHP(eople),
I am using the code below to create buttons based on entries that are
inserted into a text field from the preceding page.
I got this code from my trusty tome "PHP and MySQL Web Development" by
Luke Wellign/Laura Thomson.
Problem is this :
If I type in more than 18 characters the image creation fails with :
"The image "http://xxxxxx.xxxx.xx.xx/Generic/Admin/make_buttons.php"
cannot be displayed, because it contains errors"
When I view the HTML page source code, it simply states
"Text given is too large for button"
Any ideas on how to make it so that the error I specified comes up and
not the "The image "http://xxxxxxx.xxx.xxx.xxx.x blah blah" part.....
Here`s the code :
-------
<?php
Header('Content-type: image/png');
//Posted from previous page
//Button text and colour
$button_text = $HTTP_POST_VARS['button_text'];
$colour = $HTTP_POST_VARS['colour'];
if (empty($button_text) || empty($colour))
{
echo 'Could not create button';
exit;
}
//Create image from existing image
$image = imagecreatefrompng ('images/purple.png');
$image_width = ImageSX($image);
$image_height = ImageSY($image);
//Image needs 18 pixel margin in from the edge image
$image_width_wo_margins = $image_width - (2 * 18);
$image_height_wo_margins = $image_height - (2 * 18);
//Work out if the font size will fit and make it
//smaller until it does. Start with large size and scale down
$font_size = 33;
//Set font name and location
$fontname =
"/home/data/ClientWebs/chrisplay/Generic/Admin/a_d_mono.ttf";
do
{
$font_size--;
//Find out the size of the text at that font size
$bbox = imagettfbbox ($font_size, 0, $fontname, $button_text);
$right_text = $bbox[2]; //Right co-ordinate
$left_text = $bbox[0]; //Left co-ordinate
$width_text = $right_text - $left_text; //How wide is it ?
$height_text = abs($bbox[7] - $bbox[1]); //How tall is it ?
}
while ($font_size > 8 &&
($height_text > $image_height_wo_margins || $width_text >
$image_width_wo_margins)
);
if ($height_text > $image_height_wo_margins || $width_text >
$image_width_wo_margins)
{
//No readable font size will fit on button
echo 'Text given is too large for button';
}
else
{
//The font size fits
//Now where to put it
$text_x = $image_width/2.0 - $width_text/2.0;
$text_y = $image_height/2.0 - $height_text/2.0;
if ($left_text < 0 )
$text_x += abs($left_text); //Factor for left overhang
$above_line_text = abs($bbox[7]); //How far above the baseline
$text_y += $above_line_text; //Add baseline factor
$text_y -= 2; //Adjustment factor for shape of our template
$white = ImageColorAllocate($image, 0,0,255);
ImageTTFText ($image, $font_size, 0, $text_x, $text_y, $white,
$fontname , $button_text);
ImagePng($image);
}
ImageDestroy($image);
?>
Thanks in advance for any assistance......
Regards
--
Chris Blake
Office : (011) 782-0840
Cell : 083 985 0379
All most men really want in life is a wife, a house, two kids and a car,
a cat, no maybe a dog. Ummm, scratch one of the kids and add a dog.
Definitely a dog.