【问题标题】:Imagemagick does not show text but throws no errors eitherImagemagick 不显示文本,但也不会引发错误
【发布时间】: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


【解决方案1】:

您不能只安装 Freetype。您实际上必须在服务器上安装 Freetype,然后使用 --with-freetype-dir=/usr/local 选项重新编译 ImageMagick。 /usr/local 是 Freetype 安装的路径。

我相信它通常是 /usr/local/bin

试一试,让我们知道会发生什么;)

【讨论】:

  • 是的,但问题是已经安装了 freetype,但在 --with-freetype = on 选项上却失败了。我想我可能还需要定义它的安装目录。我会尝试按照您的说法指定目录,也许这会有所帮助。谢谢!
  • 我仔细检查了,应该使用命令:--with-freetype-dir=/path/to/freetype
  • 抱歉,我花了这么长时间才回来,我只是注意到脚本现在可以工作了!我们的系统管理员经历了几个安装、删除和重新编译的周期。无论如何,起来工作。谢谢!
猜你喜欢
  • 2017-01-04
  • 2019-10-31
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多