视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php imagestring 中文乱码怎么办
2020-11-02 18:27:35 责编:小采
文档


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系统中还要指明路径即 ./ 。

下载本文
显示全文
专题