首页 > php开发 > 在GD中输出汉字的函数的改进

在GD中输出汉字的函数的改进

感谢sadly为我们写出了在GD中输出汉字的函数,

我在使用中发现此版本输出的字符串必须为纯中文,不能夹杂英文。

随修改了此bug,与大家分享。。。

<?php
//Program writen by sadly www.phpx.com
//modified by agun 2000/6/20
function gb2utf8($gb) {
    if (!trim($gb)) return $gb;
    $filename = "gb2312.txt";
    $tmp = file($filename);
    $codetable = array();
    while (list($key, $value) = each($tmp)) $codetable[hexdec(substr($value, 0, 6)) ] = substr($value, 7, 6);
    $ret = "";
    $utf8 = "";
    while ($gb) {
        if (ord(substr($gb, 0, 1)) > 127) {
            $this = substr($gb, 0, 2);
            $gb = substr($gb, 2, strlen($gb));
            $utf8 = u2utf8(hexdec($codetable[hexdec(bin2hex($this)) - 0x8080]));
            for ($i = 0; $i < strlen($utf8); $i+= 3) $ret.= chr(substr($utf8, $i, 3));
        } else {
            $ret.= substr($gb, 0, 1);
            $gb = substr($gb, 1, strlen($gb));
        }
    }
    return $ret;
}
function u2utf8($c) {
    for ($i = 0; $i < count($c); $i++) $str = "";
    if ($c < 0x80) {
        $str.= $c;
    } else if ($c < 0x800) {
        $str.= (0xC0 | $c >> 6);
        $str.= (0x80 | $c & 0x3F);
    } else if ($c < 0x10000) {
        $str.= (0xE0 | $c >> 12);
        $str.= (0x80 | $c >> 6 & 0x3F);
        $str.= (0x80 | $c & 0x3F);
    } else if ($c < 0x200000) {
        $str.= (0xF0 | $c >> 18);
        $str.= (0x80 | $c >> 12 & 0x3F);
        $str.= (0x80 | $c >> 6 & 0x3F);
        $str.= (0x80 | $c & 0x3F);
    }
    return $str;
}
Header("Content-type: image/gif");
$im = imagecreate(300, 150);
$bkg = ImageColorAllocate($im, 0, 0, 0);
$clr = ImageColorAllocate($im, 255, 255, 255);
$fnt = "c:windowsfontssimsun.ttf";
//include("gb2utf8.php");
$str = gb2utf8("中国agun阿棍");
ImageTTFText($im, 30, 0, 50, 50, $clr, $fnt, $str);
ImageGif($im);
ImageDestroy($im);


文章网址:http://www.phprm.com/develop/0e3edd81b07671e7ae924f6315f9d5ec.html

随意转载^^但请附上教程地址。

标签:none

发表留言