使用PHP GD Lib将文本放在图像上

时间:2015-03-13 15:13:21

标签: php image-processing gd imagettftext

我需要在图像上放置一些文字。我首先像这样创建文本:

$text_box = imagecreatetruecolor($tw, $th); 
$color = imagecolorallocate($text_box, 54, 54, 54);
imagefill($text_box, 0, 0, $color );

$shadow_color = imagecolorallocate($text_box, 0, 0, 0);
$text_color = imagecolorallocate($text_box, 255, 255, 255);
$blur_intensity = 1;

$text_box = $this->imagettftextblur($text_box, $size, $angle, $x+2, (($y+2)-5), $shadow_color, $fontfile, $text, $blur_intensity);
$text_box = $this->imagettftextblur($text_box, $size, $angle, $x, ($y-5), $text_color, $fontfile, $text);

有关imagettftextblur的更多信息,请查看here

这是一种享受。然后我想把这个文本放在图像的中间:

imagecopymerge($img, $text_box, 0, 0, 50, 0, imagesx($text_box), imagesy($text_box), 100);

但这是我最终的结果:

enter image description here

奇怪地将src_x中的imagecopymerge设置为50会给它一个负偏移,而不是从左边偏移50px。另外,我最后在文本末尾加了一个黑色部分。我在哪里错了?

1 个答案:

答案 0 :(得分:3)

copymerge()坐标基本上是英文start copying at this x,y coordinate, then copy P pixels horizontally (imagesx()) and copy Q pixels vertically (imagesy())。这意味着如果您的文本框是100x200,那么您将复制(x=50,y=0) -> (x=150,y=200)处的像素。请注意,新的终止坐标将在原始图像的末尾过去。

如果这是您的原始文本框图片,x是x = 50,y = 0起始坐标:

+--x-----------+
|              |
|              |
|              |
+--------------+

然后这就是您实际复制的内容:

+--xxxxxxxxxxxxxxxxx
|  x            |  x
|  x            |  x
|  x            |  x
+--xxxxxxxxxxxxxxxxx

请注意装箱x区域如何过去原始图像的右边缘。这就是你获得黑色部分的原因。你已经告诉GD要复制你不存在的部分图像,所以它用黑色填补了这个空白。