Мне нужно разместить текст поверх изображения. Сначала я создаю текст так:
$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
Проверь это Вот.
Это работает удовольствие. Затем я хочу разместить этот текст в середине изображения:
imagecopymerge($img, $text_box, 0, 0, 50, 0, imagesx($text_box), imagesy($text_box), 100);
Но это результат, который я в конечном итоге:
Странная постановка src_x
в imagecopymerge
значение 50 дает смещение минус, вместо смещения на 50 пикселей слева. Плюс ко всему я получаю черный раздел в конце текста. Куда я здесь не так?
Координаты copymerge (), в основном, на английском языке, start copying at this x,y coordinate, then copy P pixels horizontally (imagesx()) and copy Q pixels vertically (imagesy())
, Это означает, что если ваше текстовое поле имеет размер 100×200, вы будете копировать пиксели в (x=50,y=0) -> (x=150,y=200)
, Обратите внимание на то, что новые координаты завершения идут за концом исходного изображения.
Если это ваша оригинальная картинка в текстовом поле, и x
это начальная координата x = 50, y = 0:
+--x-----------+
| |
| |
| |
+--------------+
Тогда это то, что вы на самом деле копируете:
+--xxxxxxxxxxxxxxxxx
| x | x
| x | x
| x | x
+--xxxxxxxxxxxxxxxxx
Обратите внимание, как в штучной упаковке x
область прошла мимо правого края вашего исходного изображения. Вот почему вы получаете черный раздел. Вы сказали GD скопировать части вашего изображения, которые не существуют, поэтому он заполняет эту пустоту черным.
Других решений пока нет …