首页 > 解决方案 > Laravel - 在 Jobs 中使用图像干预。图像ttfbbox错误

问题描述

我正在尝试在我的作业控制器中使用图像干预。首先,“图像源不可读错误”出来了。但后来我通过添加 storage_path 来修复。现在它显示此错误:

Call to undefined function Intervention\Image\Gd\imagettfbbox() 

当我想在图像上写字体时会发生这种情况。这些是我的代码:

$img->text($line, $x_subject, $y, function($font) use ($font_size_subject, $font_path){
    $font->file(storage_path($font_path));
    $font->size($font_size_subject);
    $font->color('#000000');
    $font->align('center');
    $font->valign('middle');
});

当我尝试在普通控制器中使用它时没有错误。当我在 Jobs 控制器中使用图像干预时,才会出现此错误。

有什么办法可以解决这个问题吗?谢谢

标签: phplaravelintervention

解决方案


当您说它在普通控制器中工作时,您的意思是当您从 http 协议(浏览器/邮递员/等)调用它时

您很可能有两个 PHP 配置(作为标准);一种用于 Web (FPM),另一种用于控制台 (CLI)。

仅在使用作业控制器时出现错误的原因是您的 PHP CLI 配置中缺少 GD 扩展。

您可以在控制台中检查 GD 扩展是否启用了php -m |grep gd. 如果启用,你应该有这样的东西

$ php -m |grep gd
12:gd

如果您没有得到第二行,则需要在正确的 ini 文件(用于 CLI 的文件)中启用扩展。

如果您不知道它在哪里,请尝试运行php -i | grep 'Configuration File',您应该会得到如下信息:

Configuration File (php.ini) Path => /etc/php/7.x/cli
Loaded Configuration File => /etc/php/7.x/cli/php.ini

希望这可以帮助

- - - - - - 编辑 - - - - - - - -

根据PHP.net imagettftext

该函数需要 GD 库和 » FreeType 库。

您必须在 CLI 配置中缺少 FreeType 库。

由于它是共享主机,因此提供者有责任帮助解决此问题。


推荐阅读