【发布时间】:2011-08-19 02:24:15
【问题描述】:
我正在使用 ImageMagick 为我们系统中的产品生成一些产品徽章。产品徽章就像SO flair,只是一些合成图像和一些文字。该脚本没有任何问题,因为它在我运行 Windows 的开发机器上运行良好。但是,在我的生产系统(CentOS 5.1)上,它会渲染除文本之外的所有内容。
我认为这是一个字体问题,但即使我将字体文件复制到 PHP 文件位置也不起作用,当我给它一个完整路径时它也不起作用。
当我将 Linux 的 Windows 字体安装为 described here 时,它不起作用。
我输入了convert -list font,它显示了 Imagick 知道的字体列表(部分列表如下所示)
Font: Times-BoldItalic
family: Times
style: Italic
stretch: Normal
weight: 700
glyphs: /usr/share/fonts/default/Type1/n021024l.pfb
Font: Times-Italic
family: Times
style: Italic
stretch: Normal
weight: 400
glyphs: /usr/share/fonts/default/Type1/n021023l.pfb
Font: Times-Roman
family: Times
style: Normal
stretch: Normal
weight: 400
glyphs: /usr/share/fonts/default/Type1/n021003l.pfb
我尝试给出此处列出的绝对路径,但没有成功。我也尝试只使用名称,但仍然没有。
基本上图像会显示,但它的文本部分根本不显示,也不会引发错误(见下图)。
代码没有任何问题,Windows 和 CentOS 都在运行接近版本的 Imagick(6.7.1-4 和 6.7.1-3)。唯一的问题可能是字体,我只是把普通的TTF字体放在上面并测试,我需要某种特殊的字体才能让它工作吗?
工作
坏了
编辑 - 忽略二维码和评分的差异。这是由于工作徽章和非工作徽章位于两个不同的服务器上。
UPDATE 1 - 我运行了一个简单的测试脚本,但即使这样也不起作用。这是我作为测试运行的:http://us2.php.net/manual/en/function.imagick-annotateimage.php 字体没有显示,也没有抛出错误。
我还从 CentOS 系统中复制了一种字体,并在 Windows 机器上进行了尝试,效果很好。字体似乎根本无法在 CentOS 上运行。
我也尝试过不设置字体,我假设 Imagick 选择了默认字体或其他东西,并且再次在 Windows 上工作,但在 CentOS 上不行。我将在不同的 *nix 版本上尝试这个,看看会发生什么。将更新调查结果。
更新 3:我已将问题缩小到我认为的 FreeType 库的问题。论坛说需要安装 FreeType 才能正确显示文本。当我查看 config.log 时,它告诉我安装 FreeType 时出现问题。对此的任何提醒将不胜感激,同时我将重新安装 Freetype 并再次运行安装。
【问题讨论】:
-
Working 图像中最左边的三颗星被填充,而 Broke 图像中它们都是空的,这有什么意义吗? ?
-
条形码也不同)但是关于主题:您是否尝试过一些简单(非常基本)的脚本来检查字体是否在 imagemagic 中工作(很难调试很多代码)?如果你这样做了 - 请在此处发布,我想你会得到更多帮助。
-
对不起,伙计们的图像差异。工作的来自具有本地数据的本地开发人员,而非工作的来自登台服务器,因此数据存在差异。我将设置一个更简单的测试脚本并将其发布在这里。但是我的命令行测试不成功。也会发布这些。
-
我不确定 CentOS,但在我的 Ubuntu 9.10 上,最新的 php5/php5-imagic 指定了字体的完整路径(甚至将字体放在执行脚本的文件夹或相对路径中)。使用来自 man us2.php.net/manual/en/function.imagick-annotateimage.php 的默认脚本进行测试,字体设置功能 - ImagickDraw::setFont()。经测试的字体 - 一些用于 windows 的随机免费 3D 字体。
-
@XzKto 尝试了测试,到目前为止还没有运气(请参阅更新)。打算在不同的 *nix 系统上尝试这个,看看它是否可以工作,只是为了确保它是我的 CentOS 机器的故障。
标签: php image imagemagick