PHP的imagettftext中文乱码解决方法

分析:

1、确认gb库是否正确安装?没有报这个方法不存在。

2、imagettftext()必须utf-8编码,php的整个项目都是utf-8编码,所以不用太多考虑。如果不是,可以mb_convert_encoding()转换;

3、检查字体是否加载正确,写死了字体路径,而且换了多个字体(常用的中文字体文件是simsun.ttc和simhei.ttf),还是不行,确认应该不是字体的问题。

然后看到网上有人说:请检查你在编译gd库时是否添加了–enable-gd-jis-conv选项,此选项是为了让gd库支持日文编码的字库,请取消此选项并重新编译。

然后我查看了我的php编译选项,是添加了这个参数,难道要重新编译?

正当我蛋疼的时候,又看到一篇文章:

$str=mb_convert_encoding('汉字', "html-entities", "utf-8"); //转成html编码

例子,具体代码如下(文件格式为gb2312):

  1. <?php
  2. $im = imagecreatefromjpeg('./1.jpg');
  3. $w = imagesx($im);
  4. $h = imagesy($im);
  5. $green = imagecolorallocate($im,50,100,200);
  6. $str = iconv('gb2312','utf-8','幸福就在身边');//解决乱码问题
  7. imagettftext($im,16,0,200,100,$green,'./simhei.ttf',$str);
  8. header("content-type: image/jpeg");
  9. imagejpeg($im);
  10. imagedestroy($im);
  11. ?>

例子2:

转码方法不复杂,不要紧张。将“我爱你”这几个字粘贴在记事本中,然后另存为utf8格式的文本,也就是unicode utf-8格式,随便起一名字保存,就叫做test.txt吧。下一步:用一个16进制的文本编辑器打开test.txt,你会看到里面的文字格式形如:chr(0xE6)等等,复制这些格式的代码,然后看下面的函数,相信你已经看懂了。

  1. <?php
  2. //在PHP的图形函数中输出“我爱你”
  3. $cur_count=chr(0xE6).chr(0x88).chr(0x91).chr(0xE7).chr(0x88).chr(0xB1).chr(0xE4).chr(0xBD).chr(0xA0).chr(0xEF).chr(0xBC).chr(0x81) ;
  4. Header("Content-type: image/gif");
  5. $im = imagecreate(156,116);
  6. $black = ImageColorAllocate($im, 0,0,0);
  7. $blue = ImageColorAllocate($im, 0,0,255);
  8. $white = ImageColorAllocate($im, 255,255,255);
  9. $yellow = ImageColorAllocate($im, 255,255,0);
  10. ImageTTFText($im,20,0,4,40,$yellow,"simkai.ttf",$cur_count);//我这里选择的本地字体是楷体,必须选择系统字库中存在的字体才行
  11. ImageGif($im); //phpfensi.com
  12. ImageDestroy($im);
  13. ?>