首页 >后端开发 >PHP问题 > 正文

php imagestring 中文乱码怎么办

原创2020-08-19 09:32:4801467

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

以上就是php imagestring 中文乱码怎么办的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

  • 相关标签:php imagestring
  • 相关文章

    相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
  • 专题推荐

    推荐视频教程
  • javascript初级视频教程javascript初级视频教程
  • jquery 基础视频教程jquery 基础视频教程
  • 视频教程分类