首页 文章

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

提问于
浏览
0

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

此代码的结果是此图像: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;?>" />

1 回答

  • 0

    使用PHP的图像函数对齐图像中的文本总是有点难题 .

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

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

    为此,如果文本放在x = 0 y = 0,则使用 imagettfbbox 来计算边界框的坐标 . 然后使用这些值计算此边界框底部中心的坐标 .

    $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 .

相关问题