developer
02-27-2008, 10:34 AM
I am using a function that write text on image, the problem is that it sometimes do not center align text and sometimes some characters missed. I use the following logic in the function, i set no of pixels for one character and multiply it with the total no of characters and divide it with the width in pixels of an image, but it is not working accurate at sometime because, i set the character pixels myself if know some way how to get pixels of a character because some characters takes more pixels and some less i.e caps characters. the code is as follows plz suggest a solution
function writeOnImage($filePath, $title, $author, $subtitle, $title_R, $title_G, $title_B, $subtitle_R, $subtitle_G, $subtitle_B, $title_fontsize, $subtitle_fontsize, $author_R, $author_G, $title_B, $author_fontsize,$finalImage)
{
//$existingImage = substr($existingImage, 3);
$im = imagecreatetruecolor(90, 30);
$title_fontColor = imagecolorallocate($im, $title_R, $title_G, $title_B);
$subtitle_fontColor = imagecolorallocate($im, $subtitle_R, $subtitle_G, $subtitle_B);
$author_fontColor = imagecolorallocate($im, $author_R, $author_G, $author_B);
// 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);
// Replace path by your own font path
$font = 'arial.ttf';
$im_bg = @imagecreatefromjpeg($filePath);
//imagejpeg($im,"New.jpeg", 100);
list($width, $height) = getimagesize($filePath);
$pixels_for_one_char = 16;
$available_pixels = (int) $width ;
//echo "ONE: ".pixels_for_one_char;
//echo " TITLE::". $title;
$title_length = strlen($title);
$pixels_for_whole_title = $title_length*$pixels_for_one_char;
if($pixels_for_whole_title > $available_pixels)
{
$no_of_lines = ceil($pixels_for_whole_title/$available_pixels);
}
else
{
$no_of_lines =1;
}
//echo "LINES".$no_of_lines ;
$y = 70;
$from=0;
$chars_in_one_line = round($available_pixels/$pixels_for_one_char);
$limit = $chars_in_one_line;
$white = imagecolorallocate($im_bg, 255, 255, 255);
$str = wordwrap($title,$chars_in_one_line,"#");
$title_in_lines = explode("#",$str);
for($i=0; $i<count($title_in_lines); $i++)
{
//echo "loop".$title_in_lines[$i];
//$text_to_write = substr($title,$from,$limit);
$total_pixels_for_title = strlen($title_in_lines[$i])*$pixels_for_one_char;
$xPosition = ( $available_pixels - $total_pixels_for_title)/2 ;
//$from = ($i+1)*$chars_in_one_line;
//$limit = $from + $chars_in_one_line;
imagettftext($im_bg, $title_fontsize, 0, $xPosition, $y, $title_fontColor, $font, $title_in_lines[$i]);
imagettftext($im_bg, $title_fontsize, 0, ($xPosition), $y-1, $title_fontColor, $font, $title_in_lines[$i]);
$y= $y+50;
}
////////////// write subtitle//////////////////////
$y = $y - 18;
$pixels_for_one_char = 8;
$available_pixels = (int) $width ;
//echo "ONE: ".pixels_for_one_char;
//echo " TITLE::". $title;
$title_length = strlen($subtitle);
$pixels_for_whole_title = $title_length*$pixels_for_one_char;
if($pixels_for_whole_title > $available_pixels)
{
$no_of_lines = ceil($pixels_for_whole_title/$available_pixels);
}
else
{
$no_of_lines =1;
}
//echo "LINES".$no_of_lines ;
$chars_in_one_line = round($available_pixels/$pixels_for_one_char);
$limit = $chars_in_one_line;
$white = imagecolorallocate($im_bg, 255, 255, 255);
$str = wordwrap($subtitle,$chars_in_one_line,"#");
$title_in_lines = explode("#",$str);
for($i=0; $i<count($title_in_lines); $i++)
{
//echo "loop".$title_in_lines[$i];
//$text_to_write = substr($title,$from,$limit);
$total_pixels_for_title = strlen($title_in_lines[$i])*$pixels_for_one_char;
$xPosition = ( $available_pixels - $total_pixels_for_title)/2 ;
//$from = ($i+1)*$chars_in_one_line;
//$limit = $from + $chars_in_one_line;
imagettftext($im_bg, $subtitle_fontsize, 0, $xPosition, $y, $subtitle_fontColor, $font, $title_in_lines[$i]);
imagettftext($im_bg, $subtitle_fontsize, 0, ($xPosition), $y-1, $subtitle_fontColor, $font, $title_in_lines[$i]);
$y= $y+50;
}
///////////////////////// write author/////////////
//$xPosition = (int) $width / 4;
$pixels_for_one_char = 16;
$available_pixels = (int) $width ;
$author_length = strlen($author);
$total_pixels_for_author = $author_length*$pixels_for_one_char;
$xPosition = ( $available_pixels - $total_pixels_for_author)/2 ;
$yPosition = $height - 10;
$path_parts = pathinfo($filePath);
//echo "<br> Extension".$path_parts['extension'];
imagettftext($im_bg, $author_fontsize, 0, $xPosition, $yPosition-89, $author_fontColor, $font, $author);
imagettftext($im_bg, $author_fontsize, 0, ($xPosition), ($yPosition - 90), $author_fontColor, $font, $author);
//header("Content-type: image/jpeg");
imagejpeg($im_bg, $finalImage, 100);
}// end write
function writeOnImage($filePath, $title, $author, $subtitle, $title_R, $title_G, $title_B, $subtitle_R, $subtitle_G, $subtitle_B, $title_fontsize, $subtitle_fontsize, $author_R, $author_G, $title_B, $author_fontsize,$finalImage)
{
//$existingImage = substr($existingImage, 3);
$im = imagecreatetruecolor(90, 30);
$title_fontColor = imagecolorallocate($im, $title_R, $title_G, $title_B);
$subtitle_fontColor = imagecolorallocate($im, $subtitle_R, $subtitle_G, $subtitle_B);
$author_fontColor = imagecolorallocate($im, $author_R, $author_G, $author_B);
// 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);
// Replace path by your own font path
$font = 'arial.ttf';
$im_bg = @imagecreatefromjpeg($filePath);
//imagejpeg($im,"New.jpeg", 100);
list($width, $height) = getimagesize($filePath);
$pixels_for_one_char = 16;
$available_pixels = (int) $width ;
//echo "ONE: ".pixels_for_one_char;
//echo " TITLE::". $title;
$title_length = strlen($title);
$pixels_for_whole_title = $title_length*$pixels_for_one_char;
if($pixels_for_whole_title > $available_pixels)
{
$no_of_lines = ceil($pixels_for_whole_title/$available_pixels);
}
else
{
$no_of_lines =1;
}
//echo "LINES".$no_of_lines ;
$y = 70;
$from=0;
$chars_in_one_line = round($available_pixels/$pixels_for_one_char);
$limit = $chars_in_one_line;
$white = imagecolorallocate($im_bg, 255, 255, 255);
$str = wordwrap($title,$chars_in_one_line,"#");
$title_in_lines = explode("#",$str);
for($i=0; $i<count($title_in_lines); $i++)
{
//echo "loop".$title_in_lines[$i];
//$text_to_write = substr($title,$from,$limit);
$total_pixels_for_title = strlen($title_in_lines[$i])*$pixels_for_one_char;
$xPosition = ( $available_pixels - $total_pixels_for_title)/2 ;
//$from = ($i+1)*$chars_in_one_line;
//$limit = $from + $chars_in_one_line;
imagettftext($im_bg, $title_fontsize, 0, $xPosition, $y, $title_fontColor, $font, $title_in_lines[$i]);
imagettftext($im_bg, $title_fontsize, 0, ($xPosition), $y-1, $title_fontColor, $font, $title_in_lines[$i]);
$y= $y+50;
}
////////////// write subtitle//////////////////////
$y = $y - 18;
$pixels_for_one_char = 8;
$available_pixels = (int) $width ;
//echo "ONE: ".pixels_for_one_char;
//echo " TITLE::". $title;
$title_length = strlen($subtitle);
$pixels_for_whole_title = $title_length*$pixels_for_one_char;
if($pixels_for_whole_title > $available_pixels)
{
$no_of_lines = ceil($pixels_for_whole_title/$available_pixels);
}
else
{
$no_of_lines =1;
}
//echo "LINES".$no_of_lines ;
$chars_in_one_line = round($available_pixels/$pixels_for_one_char);
$limit = $chars_in_one_line;
$white = imagecolorallocate($im_bg, 255, 255, 255);
$str = wordwrap($subtitle,$chars_in_one_line,"#");
$title_in_lines = explode("#",$str);
for($i=0; $i<count($title_in_lines); $i++)
{
//echo "loop".$title_in_lines[$i];
//$text_to_write = substr($title,$from,$limit);
$total_pixels_for_title = strlen($title_in_lines[$i])*$pixels_for_one_char;
$xPosition = ( $available_pixels - $total_pixels_for_title)/2 ;
//$from = ($i+1)*$chars_in_one_line;
//$limit = $from + $chars_in_one_line;
imagettftext($im_bg, $subtitle_fontsize, 0, $xPosition, $y, $subtitle_fontColor, $font, $title_in_lines[$i]);
imagettftext($im_bg, $subtitle_fontsize, 0, ($xPosition), $y-1, $subtitle_fontColor, $font, $title_in_lines[$i]);
$y= $y+50;
}
///////////////////////// write author/////////////
//$xPosition = (int) $width / 4;
$pixels_for_one_char = 16;
$available_pixels = (int) $width ;
$author_length = strlen($author);
$total_pixels_for_author = $author_length*$pixels_for_one_char;
$xPosition = ( $available_pixels - $total_pixels_for_author)/2 ;
$yPosition = $height - 10;
$path_parts = pathinfo($filePath);
//echo "<br> Extension".$path_parts['extension'];
imagettftext($im_bg, $author_fontsize, 0, $xPosition, $yPosition-89, $author_fontColor, $font, $author);
imagettftext($im_bg, $author_fontsize, 0, ($xPosition), ($yPosition - 90), $author_fontColor, $font, $author);
//header("Content-type: image/jpeg");
imagejpeg($im_bg, $finalImage, 100);
}// end write