转换为图像时文本中字符之间的原因不明

时间:2010-08-09 06:44:24

标签: fonts imagettftext

我一直在使用带有imagettftext的系统一段时间来为网站添加nog标准字体。几个月前我已经放弃了这种方法以获得更好的选择,但我在一年前创建的一个网站上遇到了问题。

该网站已被移至新服务器,除了稳定性问题和性能之外,服务器还有一个较新的php版本以及其他改进。 除了一个细节外,此举非常完美。从那时起,所生成的图像文本按钮的所有出现都具有特定字母之间的间隔。最值得注意的是W和J.生成图像本身的脚本似乎没有错,因为它已经从头开始重建,并且已经使用了其他程序员使用的几种实现。

不同的字体显示不同的结果,相当多的字体没有显示问题。

现在,逻辑解决方案是切换到像cufon甚至字体这样的系统,但这两种解决方案都有两个主要缺点。

  1. 这是非常耗时的(实现imagettftext解决方案的低效方式是我停止使用它的原因之一)。
  2. 该网站还有一个html通讯系统,显然不支持任何解决方案。
  3. 基本上我很难过。我不确定我应该从这里走哪个方向,任何帮助都会受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

这是一个字体问题。排版人员在过去的几千年里一直面临着这个问题并解决它,甚至在可移动类型的发明之前,并且肯定在计算机发明之前。它甚至有一个技术名称:它叫做kerning

这是一个经过深入研究并且解决得很好的问题。计算机化字体的出现导致了许多可以应用自动字距调整的算法的发明。大多数情况下,它需要字体本身支持渲染器的“提示”。不幸的是,计算机的出现似乎也导致了懒惰的字体设计者:那些有工具但没有培训的人。通过培训,我不是指如何使用工具的培训,而是培训字体工匠的艺术:排版培训。有了这个,我们也看到了设计糟糕的数字字体的兴起。

因此,问题不在于您的库或代码或编程语言,问题在于您使用的是设计糟糕的字体。我建议简单地避免使用它们,并为按钮使用设计更好的字体。如果你确实需要字体是花哨的但同时完美,那么可能是时候投资专为屏幕设计的专业制作的商业字体(设计用于打印的字体不合适,甚至可能更昂贵)。

很抱歉答案很长,但有时您只需了解历史就可以了解您尝试解决的“真正”问题。


PS:我说渲染器不应该受到责备,但我有点撒谎,但这只是因为如果你包含了渲染器所扮演的角色,故事就会变得复杂得多。

如果您以前的解决方案使用相同的字体,但在Web浏览器中出现错误的字距,那么这就是字体问题。您以前使用的渲染器最有可能使用自己的自动字距调整算法,该算法不依赖于字体提示,我知道Gimp可以这样做。

但是如果它在Web浏览器中按原样运行(即只是将字体属性设置为自定义字体),但在使用当前方法时会中断,那么它就是渲染器问题。 Web浏览器使用操作系统提供的系统渲染器,该渲染器遵循字体提示。有些渲染器,例如Adobe PhotoShop,只是不懂字体提示。

答案 1 :(得分:1)

我意识到这已经过时并已标记完成,但问题在于PHP中的回归,而不是字体。我很确定所有版本> 5.2.9有这个问题。 imagettftext()函数有问题。