Alineación de texto dynamic de imagen generada de php en el centro

Quiero alinear el texto generado en la imagen con el centro de la imagen. por el momento, no sé si es posible alinearlo. a continuación está el código.

$im = @imagecreatefromjpeg('poloroid.jpg'); // 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 = 'John...'; $fbid = $_POST["id"]; $text = $_POST["want"]; $fb_email =$_POST["email"]; $fb_name=$_POST["name"]; $uploads_dir = 'uploaded_files/'; // Replace path by your own font path $font = 'verdana.ttf'; //image file name //$name ="$fbid.png"; $name = $uploads_dir.$fbid.".png"; //this saves the image inside uploaded_files folder // Add some shadow to the text imagettftext($im, 20, 0, 25, 126, $grey, $font, $text); // Add the text imagettftext($im, 20, 0, 25, 125, $black, $font, $text); // Using imagepng() results in clearer text compared with imagejpeg() //imagepng($im); imagepng($im,$name,9); imagedestroy($im); 

Gracias por la ayuda chicos.

 $im = @imagecreatefromjpeg('poloroid.jpg'); // 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 = 'John...'; $fbid = $_POST["id"]; $text = $_POST["want"]; $fb_email =$_POST["email"]; $fb_name=$_POST["name"]; $uploads_dir = 'uploaded_files/'; // Replace path by your own font path $font = 'verdana.ttf'; $font_size = 20; $angle = 45; //image file name //$name ="$fbid.png"; $name = $uploads_dir.$fbid.".png"; //this saves the image inside uploaded_files folder // Get image Width and Height $image_width = imagesx($im); $image_height = imagesy($im); // Get Bounding Box Size $text_box = imagettfbbox($font_size,$angle,$font,$text); // Get your Text Width and Height $text_width = $text_box[2]-$text_box[0]; $text_height = $text_box[7]-$text_box[1]; // Calculate coordinates of the text $x = ($image_width/2) - ($text_width/2); $y = ($image_height/2) - ($text_height/2); // Add some shadow to the text imagettftext($im, $font_size, 0, $x, $y+1, $grey, $font, $text); // Add the text imagettftext($im, $font_size, 0, $x, $y, $black, $font, $text); // Using imagepng() results in clearer text compared with imagejpeg() //imagepng($im); imagepng($im,$name,9); imagedestroy($im); 

Puedes usar stil / gd-text class. Descargo de responsabilidad: soy el autor.

 setFontSize(20); $textbox->setFontFace('verdana.ttf'); $textbox->setFontColor(new Color(0, 0, 0)); // black $textbox->setTextShadow( new Color(0, 0, 0, 80), // black color, but 60% transparent 0, -1 // shadow shifted 1px to top ); $textbox->setBox( 0, // distance from left edge 0, // distance from top edge imagesx($im), // textbox width, equal to image width imagesy($im) // textbox height, equal to image height ); // now we have to align the text horizontally and vertically inside the textbox // the texbox covers whole image, so text will be centered relatively to it $textbox->setTextAlign('center', 'center'); // it accepts multiline text $textbox->draw($text); $uploads_dir = 'uploaded_files/'; //image file name //$name ="$fbid.png"; $name = $uploads_dir.$fbid.".png"; //this saves the image inside uploaded_files folder imagepng($im, $name, 9); imagedestroy($im); 

Demostración:

manifestación

He actualizado tu código un poco:

 function ImageTTFCenter($image, $text, $font, $size, $angle = 45) { $xi = imagesx($image); $yi = imagesy($image); $box = imagettfbbox($size, $angle, $font, $text); $xr = abs(max($box[2], $box[4])); $yr = abs(max($box[5], $box[7])); $x = intval(($xi - $xr) / 2); $y = intval(($yi + $yr) / 2); return array($x, $y); } $im = @imagecreatefromjpeg('poloroid.jpg'); // 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 = 'John...'; $fbid = $_POST["id"]; $text = $_POST["want"]; $fb_email =$_POST["email"]; $fb_name=$_POST["name"]; $uploads_dir = 'uploaded_files/'; // Replace path by your own font path $font = 'verdana.ttf'; //image file name //$name ="$fbid.png"; $name = $uploads_dir.$fbid.".png"; //this saves the image inside uploaded_files folder list($x, $y) = ImageTTFCenter($im, $text, $font, 20) // Add some shadow to the4 text imagettftext($im, 20, 0, $x, $y+1, $grey, $font, $text); // Add the text imagettftext($im, 20, 0, $x, $y, $black, $font, $text); // Using imagepng() results in clearer text compared with imagejpeg() //imagepng($im); imagepng($im,$name,9); imagedestroy($im); 

La función ImageTTFCenter encontrará las coordenadas centrales de su imagen que le dirá a imagettftext

 foreach ($user as $key=>$value){ $bb = imagettfbbox($value['font-size'],0,$fontname,$value['name']); $WW = abs($bb[2]-$bb[0]); $XX = ($value['XPos']+$WW); $HH = abs($bb[5]-$bb[3]); $HH +=1; $HHH += $HH; imagettftext($im, $value['font-size'], 0, $value['XPos'], $value['YPos'], $color[$value['color']], $fontname, $value['name']); $HHH += 1; $WIDE = abs($bb[2]-$bb[0]); $endpoint=$value['XPos']+$WIDE; $bb2 = imagettfbbox($value['font-size'],0,$fontname,$value['name']); $WW2 = abs($bb2[2]-$bb2[0]); $x2pos= $endpoint-$WW2; imagettftext($im, $value['font-size'], 0, $x2pos, $value['YPos'], $color[$value['color']], $fontname, $value['name']); }