现在一般的 PHP 主机都支持 GD 库和 FreeType/TrueType,普通的画字符串的函数 imagestring 只能指定字体大小,不能指定字体名称。像 imagettftext 这样的函数可以指定字体名称和字符串显示的角度,它的原型是:
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
注意这里的 $fontfile 是个字体文件,不是字体名,我刚开始就搞错了,给它传递的是 "Arial" 或是 "Arial.ttf" 而不能显示出任何东西来。在 Windows 下字体文件一般都在 c:/windows/fonts/ 目录中,所以在 Windows 下用 imagettftext 使用 TrueType 字体时的代码例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php header("Content-type: image/png"); $img = imagecreate(120, 50); $bg_color = imagecolorallocate($img, 200, 200, 255); $font_color = imagecolorallocate($img, 0,0,255); //注意,这个参数是 fontfile,也就是字体文件的路径,当然可以相对的 $fontfile = 'c:/windows/fonts/Arial.ttf'; imagettftext($img, 14, 12, 8, 42, $font_color, $fontfile, "http://unmi.cc"); $text_color = imagecolorallocate($img, 233, 14, 91); imagestring($img, 3, 5, 3,'NEW', $text_color); imagepng($img); imagedestroy($img); |
输出图片如:
那如果是放 Linux 下去,字体文件又是在哪里呢?查一些资料都说是在 /usr/share/fonts/ 目录中,可是我看我的 Linux 主机中没有这个目录,大约是那台机器还没有 XWindows 吧,不用去纠缠它。
想用什么字体,从 Windows 的字体目录拷哪个字体文件到 Linux 下某个目录去就行,放 /usr/share/fonts/ 也行,任何地方都可,只要使用时 $fontfile 指定能找到它的文件路径。从 Windows 的字体目录拷文件出来要稍加一点技巧,资源管理器打开 c:\windows\fonts,用鼠标拖出来会提示文件正在使用,需要你 CMD 进到 c:\windows\fonts,然后 copy 到别的目录再上传到 Linux 机器上。
比如我们把字体文件 arial.ttf 传到了 /usr/share/fonts/ 目录中,在 PHP 里引用该字体文件时就必须写成:
$fontfile = '/usr/share/fonts/arial.ttf';
这时候还有点要注意的就是,因为在 Linux 下文件名是区分大小写的,Windows 下写成 Arial.ttf,其实文件名是 arial.ttf,全小写的,在 Linux 下一定要大小写匹配就对的。
参考:1. Linux字体库在哪儿?
2. Linux Fonts
本文链接 https://yanbin.blog/php-gd-linux-font/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。