PHP GD多行文字实现方案

1 首先判断有几行 然后截取文字 截取文字用以下代码 (采用2个字母==1个中文)来计算的 2排文字这样两端可以基本对齐


//这个字符串变成数组
  function str_split_unicode($str, $l = 0)
    {
        if ($l > 0) {
            $ret = array();
            $len = mb_strlen($str, "UTF-8");
            for ($i = 0; $i < $len; $i += $l) {
                $ret[] = mb_substr($str, $i, $l, "UTF-8");
            }
            return $ret;
        }
        return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
    }


   //删掉start前面的字符串
    function pre_jiequhunhe($str, $start)
    {

        $slist = $this->str_split_unicode($str);
  
        if (!empty($start)) {
            $c = 0;
            foreach ($slist as $k => $v) {
                if (preg_match("/[\x7f-\xff]/", $v)) {
                    //如果中文占2个字符
                    $c += 2;
                } else {
                    //不是中文占1个字符
                    $c += 1;
                }

                if ($c > $start) {
                    break;
                }
                unset($slist[$k]);
            }
        }

        return $slist;
    }

//截取start后的字符串

    function jiequhunhe($str, $start, $len)
    {
        $slist = $this->pre_jiequhunhe($str, $start);
        $zifuchuan = '';
        $c = 0;
        foreach ($slist as $v) {
            if (preg_match("/[\x7f-\xff]/", $v)) {
                //如果中文占2个字符
                $c += 2;
            } else {
                //不是中文占1个字符
                $c += 1;
            }

            if ($c > $len) {
                break;
            }
            $zifuchuan .= $v;
        }
        return $zifuchuan;
    }

2 每截取一行存入数组

3 然后循环遍历 每次增加一行重新设置文字高度。。。 这样保证不会乱码

原创文章如转载,请注明本文链接: http://newmiracle.cn/?p=80

发表评论

电子邮件地址不会被公开。 必填项已用*标注