我需要在图像上放置一些文字。我首先像这样创建文本:
$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);
但这是我最终的结果:
奇怪地将src_x
中的imagecopymerge
设置为50会给它一个负偏移,而不是从左边偏移50px。另外,我最后在文本末尾加了一个黑色部分。我在哪里错了?
答案 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要复制你不存在的部分图像,所以它用黑色填补了这个空白。