动态GD图像宽度文字

Posted

技术标签:

【中文标题】动态GD图像宽度文字【英文标题】:Dynamic GD image width text 【发布时间】:2010-12-16 19:43:15 【问题描述】:

我正在尝试通过为标题使用自定义字体来为我的网站增添趣味。对我来说,最合适的方法是使用 php 和 GD。我写了一个小脚本,它会根据 $_GET 值输出动态文本,但是有时图像太宽,这会移动其他所有内容。

如何让图像根据文本的宽度调整其宽度?这是我目前写的代码:

<?php
// Settings
$sText = $_GET['t']; // Text of heading
$sFont = "font/AvantGarde-Book.ttf"; // Default font for headings
$sMain = $_GET['c'] ? $_GET['c'] : 0xF2AB27; // Get a font or default it

// Create the image
header("content-type: image/png"); // Set the content-type
$hImage = imagecreatetruecolor(200, 24);
ImageFill($hImage, 0, 0, IMG_COLOR_TRANSPARENT);
imagesavealpha($hImage, true);
imagealphablending($hImage, false);
imagettftext($hImage, 20, 0, 0, 24, $sMain, $sFont, $sText); // Draw the text
imagepng($hImage); // Generate the image
imagedestroy($hImage); // Destroy it from the cache ?>

谢谢!

【问题讨论】:

【参考方案1】:

函数imagettfbbox 将根据您选择的字体计算文本的大小。在调用 imagecreatetruecolor 时使用结果。

【讨论】:

我似乎无法让它工作,它会破坏图像或导致错误?【参考方案2】:

好的,我想通了!对于其他可能遇到此问题的人,您需要添加:

// Calcuate the width of the image
$arSize = imagettfbbox(24, 0, $sFont, $sText);
$iWidth = abs($arSize[2] - $arSize[0]);
$iHeight = abs($arSize[7] - $arSize[1]);

在 imagecreatetruecolor() 之前

【讨论】:

以上是关于动态GD图像宽度文字的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP GD 将文本写入不同大小的图像

垂直对齐图像和多行文本

Thinkphp图片水印和文字水印

PHP GD库生成文字图片,关于字体大小的数学题

使用 GD 批量水印图像

使用 PHP GD 计算文本宽度