php imagestring 中文乱码怎么办

  • 来源:网络
  • 更新日期:2020-08-19

摘要:php imagestring中文乱码是因为GD2库本身没有中文字体导致的,其解决办法就是要指定字体来显示所输出的字符串即可。推荐:《PHP视频教程》imagestring函数显示中文乱码1.问题描

php imagestring中文乱码是因为GD2库本身没有中文字体导致的,其解决办法就是要指定字体来显示所输出的字符串即可。

推荐:《PHP视频教程》

imagestring函数显示中文乱码

1.问题描述

在学到给图片打水印时,使用了PHP内置的GD扩展函数库,视频教程用的imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )函数,在实际应用中发现该函数无法正常显示中文水印,显示中文乱码。

2.解决过程

通过查询官网PHP手册,imagestring:水平地画一行字符串,imagestring() 用col 颜色将字符串s 画到image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果font 是 1,2,3,4 或 5,则使用内置字体。

该函数的第二个参数$font是字体参数,但官方只说明了该值设置为1-5的话使用内置字体,而通过测试发现所谓的1-5内置字体都不能正常显示中文。而且官方文档并没有说明能否使用1-5之外的其他值和其他字体文件,测试发现当把该参数设定为其他字体文件时无法正常使用。

网上查询相关内容,发现大多数情况,不能显示中文都是因为GD2库本身没有中文字体引起的,所以要指定字体来显示所输出的字符串。如果要在图片上输出中文,应该使用imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )函数。该函数的官方说明为:用 TrueType 字体向图像写入文本

该函数的第二个参数也为字体文件,应该指向一个ttf格式的字体文件,通过测试发现可以正常显示中文。$font 为该字体文件路径,当字体件放在该php文件同级目录下时即为字体文件名。

另外在PHP手册中发现还有一个imagefttext (resource$image , float$size ,float$angle ,int$x ,int$y ,int$color ,string$fontfile ,string$text [,array$extrainfo ] )t函数,

该函数的官方说明为:使用 FreeType 2 字体将文本写入图像,十分类似与上面的imagettftext函数。只是引用的字体文件类型不同,所以maybe用这个函数也可以显示中文。不过懒得去试了。。。感兴趣的可以试试。

偶然发现在Ubuntu系统下,将用到的字体文件放在该php同级目录下,$font 为该文件名字时发现该函数无法正常生效,通过查询错误日志发现imagettftext(): Could not find/open font,通过百度查询了解到,在Linux系统中,仅将$font设为文件名是不行的,还要明确路径,如'./xxx.ttf'(相对路径)或'/usr/share/fonts/xxx.ttf'(绝对路径)。测试发现可以正常显示。

3.总结:

imagestring几乎无法正常显示中文,也许有其他方法吧。不过推荐使用imagettftext,简单方便,只需引入一个字体文件即可。

imagettftext函数的$font参数在window系统中只需设置为文件名即会在当前目录下去寻找该字体文件,但在linux系统中还要指明路径即 ./ 。