让PHP发出中文图像

gb2utf8.php 文件如下:


<?
Class GB2UTF8
{
  var $gb;          // 待转换的GB2312字符串
  var $utf8;        // 转换后的UTF8字符串
   var $CodeTable;   // 转换过程中使用的GB2312代码文件数组
   var $ErrorMsg;    // 转换过程之中的错误讯息

  function GB2UTF8($InStr="")
  {
     $this->gb=$InStr;
     $this->SetGb2312(

     ($this->gb=="")?0:$this->Convert(

  }

  function SetGb2312($InStr="gb2312.txt")
  {                  // 设置gb2312代码文件,默认为gb2312.txt
     $this->ErrorMsg="";
     $tmp=@file($InStr

       if (!$tmp) {
           $this->ErrorMsg="No GB2312";
           return false;
           }
     $this->CodeTable=array(

     while(list($key,$value)=each($tmp)) {
        $this->CodeTable[hexdec(substr($value,0,6))]=substr($value,7,6

     }
  }

  function Convert()
  {                   // 转换GB2312字符串到UTF8字符串,需预先设置$gb
     $this->utf8="";
     if(!trim($this->gb) || $this->ErrorMsg!="") {
        return ($this->utf8=$this->ErrorMsg

     }
       $str=$this->gb;

     while($str) {
        if (ord(substr($str,0,1))>127)
           {
              $tmp=substr($str,0,2

              $str=substr($str,2,strlen($str)

              $tmp=$this->U2UTF8(hexdec($this->CodeTable[hexdec(bin2hex($tmp))-0x8080])

              for($i=0;$i<strlen ($tmp
$i+=3)
              $this->utf8.=chr(substr($tmp,$i,3)

           }
        else
           {
              $tmp=substr($str,0,1

              $str=substr($str,1,strlen($str)

              $this->utf8.=$tmp;
           }
        }
     return $this->utf8;
  }


  function U2UTF8($InStr)
  {
     for($i=0;$i<count($InStr
$i++)
     $str="";
     if ($InStr < 0x80) {
        $str.=ord($InStr

     }
     else if ($InStr < 0x800) {
        $str.=(0xC0 | $InStr>>6

        $str.=(0x80 | $InStr & 0x3F

     }
     else if ($InStr < 0x10000) {
        $str.=(0xE0 | $InStr>>12

        $str.=(0x80 | $InStr>>6 & 0x3F

        $str.=(0x80 | $InStr & 0x3F

     }
     else if ($InStr < 0x200000) {
        $str.=(0xF0 | $InStr>>18

        $str.=(0x80 | $InStr>>12 & 0x3F

        $str.=(0x80 | $InStr>>6 & 0x3F

        $str.=(0x80 | $InStr & 0x3F

     }
     return $str;
  }
}
?>




测试文件如下:
代码:


<?php
Header("Content-type: image/png"

$im = imagecreate(400,300

$black = ImageColorAllocate($im, 0,0,0

$white = ImageColorAllocate($im, 184,44,6

include("gb2utf8.php"

$obj=new gb2utf8(

$obj->gb="123abc中国456def测试正确";
$obj->Convert(

ImageTTFText($im, 20, 0, 5, 50, $white, "SIMKAI.TTF", $obj->utf8

ImagePNG($im

ImageDestroy($im

?>




说明:
需要正确设置font文件,请先确认可以使用font直接(不使用gb2utf8)输出英文。
gb2312.txt请在网上查找

如果您觉得我的文章有帮助,请随意赞赏!

*发表评论

用QQ账号登录  请登录后发表评论