为什么使用php GD库图片输出中文字会出现乱码

<?phpheader("content-type:image/jpeg");//定义输出为图像类型$im=imagecreatefromjpeg("images/pho... <?php
header("content-type:image/jpeg"); //定义输出为图像类型
$im=imagecreatefromjpeg("images/photo.jpg"); //载入照片
$textcolor=imagecolorallocate($im,56,73,136);//设置字体颜色为蓝色,值为RGB颜色值
$fnt="c:/windows/fonts/simhei.ttf"; //定义字体
$motto=chr(0xE9).chr(0x95).chr(0xBF).chr(0xE7).chr(0x99).chr(0xBD).chr(0xE5).chr(0xB1).chr(0xB1).chr(0xE5).chr(0xA4).chr(0xA9).chr(0xE6).chr(0xB1).chr(0xA0); //定义输出字体串
imageTTFText($im,220,0,480,340,$textcolor,$fnt,$motto); //写TTF文字到图中
imagegif($im); //建立gif图形
imagedestroy($im); //结束图形,释放内存空间
?>
展开
 我来答
du瓶邪
2015-08-05 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2823万
展开全部
原因:
  1、服务器编码原因。由于imagettftext函数字符串参数的默认编码是UTF8,如果服务器编码不一致,而又没有进行相应的字符编码格式转换,很容易出现使用gd库输出图片时中文字符变成乱码。
  2、没有选择正确的TTF字体文件。使用gd库时如果要输出中文字符,需要选择正确的TTF字体文件。

解决方法:
  根据之前介绍的php gd库产生中文乱码的原理,解决php gd库中文乱码的方法其实很简单。
  1、建议整站使用UTF8编码,如果你已使用的是GB2312或GBK编码,请使用iconv或自定义的gb2312与utf8转换函数进行字符编码转换。gb2312与utf8转换函数请参考PHP Ajax传值中文字符乱码如何解决。
  2、如果你是刚进行php环境搭建,建议将Apache配置文件中的默认字符集修改为UTF8,即AddDefaultCharset UTF8。
  3、如果上述方法还不行,请检查你在编译gd库时是否添加了–enable-gd-jis-conv选项,此选项是为了让gd库支持日文编码的字库,请取消此选项并重新编译。此方法我没验证过,估计主要是针对Unix下安装配置php环境。Windows环境一般不会出现这种情况,似乎默认PHP配置文件是注释掉的。
  4、使用php gd库产生中文乱码的另一个原因是没有选择正确的TTF字体,你需要选择支持中文的字体,常用的中文字体文件是simsun.ttc和simhei.ttf。
  OK,只要按照上述方法,基本上使用php gd库产生中文乱码时都能够解决。只要仔细排查其实gd库的中文乱码解决起来非常方便。
百度网友0c90796
2010-08-23 · TA获得超过1611个赞
知道大有可为答主
回答量:2638
采纳率:0%
帮助的人:1075万
展开全部
//修改后的代码

<?php
header("content-type:image/jpeg"); //定义输出为图像类型
$im=imagecreatefromjpeg("images/photo.jpg"); //载入照片
$textcolor=imagecolorallocate($im,56,73,136);//设置字体颜色为蓝色,值为RGB颜色值
$fnt="c:/windows/fonts/simhei.ttf"; //定义字体
$motto=chr(0xE9).chr(0x95).chr(0xBF).chr(0xE7).chr(0x99).chr(0xBD).chr(0xE5).chr(0xB1).chr(0xB1).chr(0xE5).chr(0xA4).chr(0xA9).chr(0xE6).chr(0xB1).chr(0xA0); //定义输出字体串
imageTTFText($im,220,0,480,340,$textcolor,$fnt,$motto); //写TTF文字到图中
imagejpeg($im); //建立jpeg图形
imagedestroy($im); //结束图形,释放内存空间

?>

参考资料: phptogether.com

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hotdigger
2010-08-23 · TA获得超过3590个赞
知道大有可为答主
回答量:1458
采纳率:50%
帮助的人:606万
展开全部
这是因为php访问到不你指定的c:/windows/fonts/simhei.ttf字体文件。
你把simhei.ttf复制到你的当前PHP文件夹下,比如你这个php文件是test.php,
然后把simhei.ttf复制到test.php一起,再把$fnt改成
$fnt="./simhei.ttf";
然后就可以了。至于为什么不能访问字体文件,是因为文件夹的路径超出了apache可访问的权限范围了。
我试过了,你的那几个字是“长白山天池”。
呵呵。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zourenfahj
2010-08-23 · TA获得超过112个赞
知道答主
回答量:102
采纳率:0%
帮助的人:61.9万
展开全部
iconv("gb2312","UTF-8",$motto); //先将汉字转换成utf-8编码试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式