• 技术文章 >后端开发 >PHP问题

    php imagestring 中文乱码怎么办

    藏色散人藏色散人2020-08-19 09:32:48原创801

    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中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php imagestring
    上一篇:php如何去掉字符串所有空格 下一篇:php如何获取对象所有方法
    线上培训班

    相关文章推荐

    • utf8编码的php导出CSV乱码怎么解决?• php domdocument中文乱码怎么办• 如何解决PHP md5函数的16位字符乱码问题• php 弹出框乱码怎么办

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网