[英]PHP GD - Align text center-horizontally and decrease font size to keep it inside the image
希望你过得很好。
我仍然是php的新手,因此在阅读并查看此处的一些文章后,我能够使用PHP GD使用imagecreatefrompng()函数在图像上放置一些文本,用户将形成一个表格,他们将能够输入他们的名字并且名字会写在图像上,不幸的是我无法水平对齐文本中心,我尝试了所有可能的方法(我的方法很明显并且一定是错误的),使用imagettfbbox进行了尝试,但是我都失败了,您能否请我帮我一点儿,以使琴弦中心水平对齐? 另外,由于我使用的是另一种大字体,因此如果输入的名称很长,则需要减小大小,这样就不会超过图像限制并保持在中心。 我正在从表单中获取文本的值,您可以在代码开头检查一下:
<?php
$nombre=$_POST['nombre'];
//Set the Content Type
header('Content-type: image/jpeg');
// Create Image From Existing File
$jpg_image = imagecreatefromjpeg('fabian.jpg');
// Allocate A Color For The Text
$white = imagecolorallocate($jpg_image, 255, 255, 255);
// Set Path to Font File
$font_path = 'fabian.TTF';
// Set Text to Be Printed On Image , I set it to uppercase
$text =strtoupper($nombre);
// Print Text On Image
imagettftext($jpg_image, 75, 0, 50, 400, $white, $font_path, $text);
// Send Image to Browser
imagepng($jpg_image);
// Clear Memory
imagedestroy($jpg_image);
?>
我们将不胜感激您的帮助,稍后,我将试图通过单击“提交”按钮来保存图像,因为我不希望用户通过右键单击来保存图像。
谢谢朋友!
您需要图像的宽度和文本的宽度来关联两者。
// get image dimensions
list($img_width, $img_height,,) = getimagesize("fabian.jpg");
// find font-size for $txt_width = 80% of $img_width...
$font_size = 1;
$txt_max_width = intval(0.8 * $img_width);
do {
$font_size++;
$p = imagettfbbox($font_size, 0, $font_path, $text);
$txt_width = $p[2] - $p[0];
// $txt_height=$p[1]-$p[7]; // just in case you need it
} while ($txt_width <= $txt_max_width);
// now center the text
$y = $img_height * 0.9; // baseline of text at 90% of $img_height
$x = ($img_width - $txt_width) / 2;
imagettftext($jpg_image, $font_size, 0, $x, $y, $white, $font_path, $text);
您可以使用stil / gd-text类来对齐文本。 免责声明:我是作者。
<?php
use GDText\Box;
use GDText\Color;
$jpg_image = imagecreatefromjpeg('fabian.jpg');
$textbox = new Box($jpg_image);
$textbox->setFontSize(75);
$textbox->setFontFace('fabian.TTF');
$textbox->setFontColor(new Color(255, 255, 255));
$textbox->setBox(
50, // distance from left edge
50, // distance from top edge
200, // textbox width
100 // textbox height
);
// text will be aligned inside textbox to center horizontally and to top vertically
$textbox->setTextAlign('center', 'top');
$textbox->draw(strtoupper($nombre));
但是,这并不是一个完整的答案,因为它不能自动减小字体大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.