3

使用imagettftextPHP GD 库中的函数,只能在图像上绘制左对齐的文本。至少看起来是这样,也许我错过了一些东西。

如何控制绘制到图像上的文本的对齐方式?即左/中/右(/合理 - 不是必需的,但有用)

我应该提到,当绘制的文本包含多行时,对齐是可见的(例如“bla bla bla/nAnd another line of bla.”)。

4

3 回答 3

6

你不是在imagettftext()写某种“盒子”,而是在给定的坐标上。要正确对齐文本,您必须计算正确的坐标以使其“看起来像”它是右对齐或居中的。

为此,您可以使用imagettfbox()来获取文本的大小 - 剩下的就是简单的数学运算:

  • 右对齐添加[textarea-width]-[textwidth]到您的X- 坐标
  • 居中添加([textarea-width]-[textwidth]) / 2到您的X- 坐标

(* textarea = 您想在图像中写入文本的区域 - 您应该知道它的大小)

于 2012-11-05T13:58:49.867 回答
5

您可以使用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");

示范:

演示

于 2015-01-02T12:52:11.113 回答
0

该函数接受 x 和 y 位置坐标。

    array imagettftext ( resource $image, 
                         float $size, 
                         float $angle, 
                         int $x, 
                         int $y, 
                         int $color, 
                         string $fontfile, 
                         string $text )

看看http://php.net/manual/en/function.imagettftext.php

于 2012-11-05T14:01:33.153 回答