【问题标题】:How to only horizontally align text on image in php gd library如何在 php gd 库中仅水平对齐图像上的文本
【发布时间】:2021-07-03 17:11:38
【问题描述】:

我正在尝试仅水平对齐 php gd 库中图像上的文本,就像您使用 "text-align: center" 所做的那样,因此如果文本太大,则文本不会超出图像。

<?php
// (A) OPEN IMAGE
$img = imagecreatefrompng('LOGO.PNG');

// (B) WRITE TEXT
$txt = "Divine Magnificent Endurance";
$font = "C:/xampp/htdocs/testImages/ArialCE.ttf"; 
$white = imagecolorallocate($img, 0, 0, 0);

$width = imagesx($img);
$height = imagesy($img);

$text_size = imagettfbbox(24, 0, $font, $txt);
$text_width = max([$text_size[2], $text_size[4]]) - min([$text_size[0], $text_size[6]]);
$text_height = max([$text_size[5], $text_size[7]]) - min([$text_size[1], $text_size[3]]);

$centerX = CEIL(($width - $text_width) / 2);
$centerX = $centerX<0 ? 0 : $centerX;
$centerY = CEIL(($height - $text_height) / 1.3);
$centerY = $centerY<0 ? 0 : $centerY;
imagettftext($img, 18, 0, $centerX, $centerY, $white, $font, $txt);

imagesavealpha($img, true);

// (C) OUTPUT IMAGE
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);

【问题讨论】:

    标签: php gd


    【解决方案1】:

    我在生成头像时必须实现类似的功能,我通过抓取imagettfbbox 的第三个和第六个值来解决这个问题,即 X 位置的右下角和 Y 位置的右上角,具有这些我从图像的高度和宽度中减去它,然后将该值除以一半,四舍五入并获取绝对值,这将是我的xy 坐标。

    我研究了哪些值和数学运算会产生最佳结果,这给了我所需的居中。

    $centerY = abs(ceil(($height - $text_size[5]) / 2));
    $centerX = abs(ceil(($width - $text_size[2]) / 2));
    

    我在我的 Dev 帐户上写了一个 post 关于它可能有用的信息。我希望这能给你一些正确的方向帮助。

    【讨论】:

    • 很高兴我能帮上忙。 ?
    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2021-07-08
    相关资源
    最近更新 更多