首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用imagettftext()和imagefttext()函数的PHP更新紧排问题

使用imagettftext()和imagefttext()函数的PHP更新紧排问题
EN

Stack Overflow用户
提问于 2010-04-10 02:48:08
回答 2查看 3.1K关注 0票数 4

我们的开发服务器最近升级到了PHPV5.2.13。通过这次升级,我们发现我们的png图像存在字距(字母间距)问题。我们已经尝试了许多字体,但还没有找到解决方案。

我们使用GD库创建图像,并使用字体文件和imagettftext()或imagefttext()函数将文本写入图像。

有没有其他人遇到过这种情况?我是不是误解了什么,还是应该把它作为bug提交给PHP?有没有什么我还没想到的很酷的变通方法呢?

这里有一个新的和旧的tahoma粗体的例子。其他字体(粗体和非粗体)也有同样的问题。有些字母和数字看起来像是偏离了中心或类似的东西。

坏-新PHP

Good - old PHP v5.2.11 (单词略有不同,因为这是我们的开发服务器,另一个是实时服务器)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-10 03:43:25

“跟踪”是一个类似的术语,表示文本设置的紧凑程度或松散程度。你可能会更幸运地用谷歌搜索一下,比如this result

票数 3
EN

Stack Overflow用户

发布于 2016-08-31 17:07:06

由于我们使用的字体,字距调整对我们不起作用,所以我们不得不为特定的字母组合,如AV,AW ...etc,手动添加字距调整。

/**
 * This function lets you write a string with your own letter spacing ($t)
 * and kern specific letter combinations like AV
 * 
 * @param type $im An image resource, returned by one of the image creation functions
 * @param type $size The font size. Depending on your version of GD, this should be specified as the pixel size (GD1) or point size (GD2).
 * @param type $angle The angle in degrees, with 0 degrees being left-to-right reading text. Higher values represent a counter-clockwise rotation. For example, a value of 90 would result in bottom-to-top reading text.
 * @param type $t Letter Spacing
 * @param type $k Kerning Spacing
 * @param type $x The coordinates given by x and y will define the basepoint of the first character (roughly the lower-left corner of the character). This is different from the imagestring(), where x and y define the upper-left corner of the first character. For example, "top left" is 0, 0.
 * @param type $y The y-ordinate. This sets the position of the fonts baseline, not the very bottom of the character.
 * @param type $color The color index. Using the negative of a color index has the effect of turning off antialiasing. See imagecolorallocate().
 * @param type $font The path to the TrueType font you wish to use.
 * @param type $text Text to write/print to the image
 */
function ImageTTFTextWithSpacing($im, $size, $angle, $t, $k, $x, $y, $color, $font, $text) {
    $numchar = strlen($text);
    for($i = 0; $i < $numchar; $i++) {
        # Assign character
        $char[$i] = substr($text, $i, 1);

        //Top is wider than bottom of character
        $up = ['Y','V','W'];
        //Bottom is wider than top of character
        $down = ['A'];
        //From the second letter on
        if( $i > 0 && 
                //check whether we have TOP and BOTTOM type character 
                //next to each other so we need to adjust spacing
                ((in_array($char[$i], $up) && in_array($char[$i-1], $down)) || 
                (in_array($char[$i-1], $up) && in_array($char[$i], $down)) )) {
            $w -= $k;
        }

        # Write character
        imagettftext($im, $size, $angle, ($x + $w + ($i * $t)), $y, $color, $font, $char[$i]);

        # Get width of character
        $width = imagettfbbox($size, $angle, $font, $char[$i]);
        $w = $w + $width[2];
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2610019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档