You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP GD库跨脚本调用生成签名图片返回空白问题求助

问题排查与解决方案

1. 字体文件路径错误(核心原因)

直接运行generarFirma.php时,当前工作目录是该文件所在目录,../fuentesFirma/xxx.ttf的相对路径有效。但被其他脚本include后,当前工作目录变为调用脚本的所在目录,原相对路径无法定位到字体文件,导致imagettftext执行失败,最终生成仅含白色背景的空白图。

修复方案:

使用绝对路径引用字体,借助__DIR__获取当前函数所在文件的绝对目录,确保路径不受调用环境影响:

$fuentes = [
    __DIR__ . '/../fuentesFirma/HomemadeApple-Regular.ttf',
    __DIR__ . '/../fuentesFirma/Allura-Regular.ttf',
    __DIR__ . '/../fuentesFirma/DawningofaNewDay-Regular.ttf',
    __DIR__ . '/../fuentesFirma/HerrVonMuellerhoff-Regular.ttf',
    __DIR__ . '/../fuentesFirma/LaBelleAurore-Regular.ttf',
];

2. 开启错误捕获,定位执行异常

添加错误检查代码,确认imagettftext是否正常执行:

// 在imagettftext调用后添加
if (!imagettftext($im, 20, 0, 0, 30, $black, $fuente, $name)) {
    die('字体加载失败:' . $fuente);
}

也可在调用脚本开头开启PHP错误显示,直接查看具体报错:

error_reporting(E_ALL);
ini_set('display_errors', 1);

3. 清理冗余的缓冲区操作

原代码中ob_end_clean()属于冗余操作,ob_get_clean()已经会关闭并清空缓冲区,多余操作可能导致输出异常,修改后代码:

ob_start();
imagepng($im);
$buffer = ob_get_clean();
// 移除ob_end_clean()
return base64_encode($buffer);

4. 修正多字节字符的尺寸计算问题

strlen()处理多字节字符(如María中的í)时会计算错误,导致图片宽度不足、文字被截断,改用mb_strlen():

$tamano = 15 * mb_strlen($name, 'UTF-8');

5. 确保字符编码一致

姓名包含特殊字符时,需保证PHP文件编码为UTF-8,同时在函数开头统一字符串编码:

$name = mb_convert_encoding($name, 'UTF-8', 'auto');

内容的提问来源于stack exchange,提问作者Phyron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:10:32