如何使用PHP GD合并两个图像来使文本居中和对齐

时间:2018-12-09 22:54:48

标签: php gd

如何在主图像上方集中并对齐文本?

此代码的结果是此图像: 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 :(得分:0)

使用PHP的图像功能对齐图像中的文本总是有些困惑。

首先,您需要知道文本应到达的底部中心点(锚点)的x和y坐标。对于x来说,这可能是外部图像的宽度的一半,对于中心点,这是较小图像顶部的y值(减去边距值)的原因。

此后,您必须计算文本的放置位置(x和y),以使其在中心的较小图像上方(在锚点上方居中)对齐。

为此,您可以使用^来计算如果将文本放在x = 0 y = 0的情况下边界框的坐标。然后,您可以使用这些值来计算此边界框底部中心的坐标。

sum(unlist(mget(ls(pattern = '^x\\d+$')))^2)

从我们第一个计算出的锚点中减去这些相对值,即可获得使用x111 <- 23 x112 <- 54 放置文本的坐标。

请参见http://php.net/manual/en/function.imagettfbbox.php,以了解哪个数组值是哪个坐标值。