как центрировать и выравнивать тексты путем слияния двух изображений с помощью PHP GD - PullRequest
0 голосов
/ 10 декабря 2018

Как мне централизовать и выровнять текст над моим основным изображением?

Результатом этого кода является следующее изображение: https://i.imgur.com/Dk5pYJM.jpg

Хотелось бы, чтобы это выглядело так: https://i.imgur.com/mED295l.jpg

но я не очень понимаю, как перемещать изображения и тексты.

<?php
$fontname = 'verdana.ttf';
$i = 30;
$quality = 85;
function create_image($user){
    global $fontname;
    global $quality;
    $file = md5($user[1]['text'].rand(30454, 343434)).".jpg";

    //if (!file_exists($file)) {
        $im   = imagecreatefromjpeg("fundo.jpg");
        $logo = imagecreatefromjpeg("img.jpeg"); 
        $color['grey']  = imagecolorallocate($im, 255, 255, 255);
        $y = imagesy($im) - $height - 365;
        $font_size = 25;
        $logo_x = imagesx($logo); 
        $logo_y = imagesy($logo); 
        
        foreach ($user as $value){
            $x = center_text($value['text'], $font_size);
            imagettftext($im, $font_size, 0, $x, $y+$i, $color["grey"], $fontname, $value['text']);
            $i = $i+32;

        }
        imagecopymerge($im, $logo, 37, 370, 0, 0, $logo_x, $logo_y, 100);
        imagejpeg($im, $file, $quality);
    //}
    return $file;
}

function center_text($string, $font_size) {
    global $fontname;
    $image_width = 720;
    $dimensions = imagettfbbox($font_size, 0, $fontname, $string);
    return ceil(($image_width - $dimensions[4]) / 2);
}

$user = array(
    array('text'=> 'Our adge lacks gravitas. That’s whyaadasdasdasdasdsadasdasdasdas')
);
$filename = create_image($user);
?>
<img src="<?=$filename;?>" /><br/><br/>

1 Ответ

0 голосов
/ 10 декабря 2018

Выравнивание текста на изображении с помощью PHP-функций изображения всегда является небольшой загадкой.

Во-первых, вам нужно знать координаты x и y точки в центре снизу того места, куда должен идти текст(опорная точка).Вероятно, это половина ширины внешнего изображения для x и значения y верхней части меньшего изображения в центре (за вычетом значения поля) для y.

После этого вы должны вычислитьгде ваш текст должен быть помещен (x и y) так, чтобы он выровнялся над меньшим изображением в центре (по центру над точкой привязки).

Для этого вы используете imagettfbbox, чтобы вычислить, что ограничиваеткоординаты блока будут, если текст будет установлен на x = 0 y = 0.Тогда вы использовать эти значения, чтобы вычислить координаты нижнего центра этой ограничительной рамки.

$bounding_box = imagettfbbox(......);

/* lower right x - lower left x, divided by 2 */
$relative_x = ( $bounding_box[2] - $bounding_box[0] ) / 2;
/* lower left y */
$relative_y = $bounding_box[1];

Вычитая эти относительные значения от нашей первой расчетной точки привязки, дает координаты, чтобы поместить текст, используя imagettftext.

См. http://php.net/manual/en/function.imagettfbbox.php, для которого значение массива является значением координаты.

...