php 文字转图片-----长微博功能开发

来源:互联网 发布:暴风影音官网windows版 编辑:程序博客网 时间:2024/05/21 06:43

这个功能开发主要涉及几个问题:

1、文字换行

2、汉字乱码问题


1、文字换行,这里面我纠结了一阵之后,发现主要的问题在于  php 里面的单引号和双引号的问题。

我再字符串 ‘我爱中国’ (单引号) 里面添加 \n  作为换行处理,发现 怎么也不成功, 换成 "我爱\n中国" (双引号) 就可以了

主要就是php 单引号和双引号的区别。可能刚开始你会觉得不都是引用字符串没有什么区别。其实,区别大了。

单引号 引起来的字符串 是不对里面的特殊字符串做解析的,'我爱\n中国'  用 echo 打印出来 就是  我爱\n中国  没有做换行处理。而用双引号,是会做换行处理的。

当然,单引号执行的效率会高一些,如果在遇到一些需要对特殊字符串处理的地方还是要用双引号。


2. 汉字乱码的问题,纠结了很久,网上找到 有的说是要全部转为utf-8的编码 包括.php文本,输出的字符串等。最后这些都做了,还是乱码。有的说是,php 编译的时候是带着日本的字符编码的,所以会出错,但是我不可能去重新编译php程序。最后,找到的解决办法是,换了一种字体-------- simhei.ttf 。很神奇,只能说,这个是字体的原因。


附上 ,我写的和在网上找的代码的综合体


<?php
namespace Addons\Word2Png\Controller;
use Home\Controller\AddonsController;
use Think;

class Word2PngController extends AddonsController{

    public function index(){

         $this->display(T('Addons://Word2Png@Word2Png/index'));
    }
/**
 * 图片转文字算法
 * @author hani  <[email]>
 */
    
    public function url(){
        $words = I('words');
        echo $res = addons_url('Word2Png://Word2Png/change',array('words'=>$words)) ;
    }


    public function change(){
        
        //$words = I('words');
         $words = "顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶速度是多少ssssssssssssssssssssssss" ;
         //echo get_str_num($words);die();
        // $words =   mb_convert_encoding( $words , 'UTF-8', 'GB2312' );
        //die();

        $font         = 30; //字体宽
        $x             = 306; //图片宽
        $temp         = $font * ceil( (get_str_num($words)*$font)/$x );
        $y             =  $temp ? $temp: $font ; //图片的高
        $words         = $this->autowrap($font,0,"./Arial/arial.ttf" ,$words,$x);

        $im      = @imagecreate($x, $y);
        $background_color = imagecolorallocate($im, 255, 255, 255);
        $text_color = imagecolorallocate($im, 233, 14, 91);

        header("Content-type: image/png");
        ImageTTFText($im, 15, 0, 40, 20, $text_color, "./Arial/simhei.ttf", $words);
        imagepng($im);
        imagedestroy($im);

    }



        function autowrap($fontsize, $angle, $fontface, $string, $width) {
        // 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度
         $content = "";

         // 将字符串拆分成一个个单字 保存到数组 letter 中
         for ($i=0;$i<get_str_num($string);$i++) {
           $letter[] = msubstr($string, $i, 1,'utf-8',false);
         }

         foreach ($letter as $l) {
          $teststr = $content." ".$l;
          $testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
          // 判断拼接后的字符串是否超过预设的宽度
          if (($testbox[2] > $width) && ($content !== "")) {
           $content .= " \n";
          }
          $content .= $l;
         }
         return $content;
        }

}


0 0
原创粉丝点击