使用PHP GD库中的imagettftext
函数,只能绘制左对齐到图像上的文本。至少看起来如此,也许我错过了一些东西。
如何控制绘制到图像上的文本的对齐方式?即左/中/右(/对齐 - 不必要,但有用)
我应该提一下,当绘制的文本包含多行时,对齐是可见的(例如“bla bla bla / n和另一行bla。”)。
答案 0 :(得分:6)
imagettftext()
你没有写入某种“盒子”,只是在给定的坐标上。要正确地对文本进行分析,你必须计算正确的坐标,使其“看起来像是”右对齐或居中。
这样做,您可以使用imagettfbox()
来获取文本的大小 - 其余的都是简单的数学:
[textarea-width]-[textwidth]
到您的X
- 坐标([textarea-width]-[textwidth]) / 2
- 坐标X
(* textarea =您要在图片中写下文字的区域 - 您应该知道它的大小)
答案 1 :(得分:4)
您可以使用stil/gd-text课程。免责声明:我是作者。
<?php
use GDText\Box;
use GDText\Color;
$img = imagecreatefromjpeg('image.jpg');
$textbox = new Box($img);
$textbox->setFontSize(12);
$textbox->setFontFace('arial.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
);
// now we have to align the text horizontally and vertically inside the textbox
$textbox->setTextAlign('left', 'top');
// or like this:
// $textbox->setTextAlign('right', 'top');
// $textbox->setTextAlign('center', 'top');
// $textbox->setTextAlign('center', 'bottom');
// $textbox->setTextAlign('right', 'center');
// it accepts multiline text
$textbox->draw("text to write on picture\nanother line below");
演示:
答案 2 :(得分:0)
该函数接受x和y位置坐标。
array imagettftext ( resource $image,
float $size,
float $angle,
int $x,
int $y,
int $color,
string $fontfile,
string $text )