zoukankan      html  css  js  c++  java
  • [转]php Imagick写文字图片并自动换行

    原文连接:http://xiaocai.name/post/cf1f9_82a6e3,不过该链接已经不能用了,我是通过百度快照看到的内容,为了方便其他人查询,现将内容完全拷贝到这里。原文内容需要稍作修改即可运行,为了不引起误会,原文内容我只改了效果图,其他文字部分一点没动。

    愤怒的小菜

    小菜的成长博客
    php Imagick写文字图片并自动换行

    效果:

    代码:

    function echoImgAction(){
    
            $text = "  战争网游巨作《坦克世界》领土争夺战将在近日重新开启新的征程。全新地图,多样玩法,更大参战范围;普通玩家、资深高玩以及专业电竞人士都会重装上阵。今天,小编带领大家回忆领土战曾经的吸金之地,全方位感受《坦克世界》领土争夺战带来的全民参战的宏伟壮丽。";
    
            $top  = 10;
    
            $left = 5;
    
            $eol  = PHP_EOL;
    
            $fontsize = 12;
    
            $fontfile = 'msyh.ttf';
    
            $text     = $this->autowrap($fontsize,$fontfile,$text,500);
    
            
    
            $canvas = new Imagick();
    
            $canvas->newImage(500, 400, 'white', 'jpg');
    
            $canvas->setImageFormat('png');
    
            $draw   = new ImagickDraw();
    
            $draw->setFontSize($fontsize);//设置字体大小
    
            $draw->setFillColor('#7D7B7B');//设置字体颜色
    
            $draw->setFont($fontfile);
    
            $canvas->annotateImage($draw, $left, ($fontsize+2)+$top, 0, $text);
    
            
    
            header("Content-Type: image/png");
    
            echo $canvas;
    
            return false;
    
    }
    

    函数:

        /**
    
         *  返回一个字符的数组
    
         * @param $str 文字
    
         * @param $charset 字符编码
    
         */
    
        function chararray($str,$charset="utf-8"){
    
            $re['utf-8']   = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
    
            $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
    
            $re['gbk']    = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
    
            $re['big5']   = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
    
            preg_match_all($re[$charset], $str, $match);
    
            return $match;
    
        }
    
    
        /**
    
         * 返回一个字符串在图片中所占的宽度
    
         * @param $fontsize  字体大小
    
         * @param $fontangle 角度
    
         * @param $ttfpath   字体文件
    
         * @param $char      字符
    
         */
    
        function charwidth($fontsize,$fontangle,$ttfpath,$char){
    
            $box = @imagettfbbox($fontsize,$fontangle,$ttfpath,$char);
    
            $width = max($box[2], $box[4]) - min($box[0], $box[6]);
    
            return $width;
    
        }
    
        
    
        /**
    
         * 根据预设宽度让文字自动换行
    
         * @param $fontsize   字体大小
    
         * @param $ttfpath    字体名称
    
         * @param $str    字符串
    
         * @param $width    预设宽度
    
         * @param $fontangle  角度
    
         * @param $charset    编码
    
         */
    
        function autowrap($fontsize,$ttfpath,$str,$width,$fontangle=0,$charset='utf-8'){
    
            $_string = "";
    
            $_width  = 0;
    
            $temp    = $this->chararray($str);
    
            foreach ($temp[0] as $k=>$v){
    
                $w = $this->charwidth($fontsize,$fontangle,$ttfpath,$v);
    
                $_width += intval($w);
    
                if (($_width > $width) && ($v !== "")){
    
                    $_string .= PHP_EOL;
    
                    $_width = 0;
    
                }
    
                $_string .= $v;
    
                $w = 0;
    
            }
    
            //$_string = mb_convert_encoding($_string, "html-entities","utf-8" );
    
            return $_string;
    
        }
  • 相关阅读:
    golang访问数据库
    dynamic与泛型
    新的published和$M+对比
    插入窗体到别的程序里
    淺談怎么样运用Delphi 2009地泛型容器類別
    Delphi随记
    查找文件
    Delphi操作xml
    Delphi图像编程学习笔记
    Ext.net中如何上传文件
  • 原文地址:https://www.cnblogs.com/zhuyanwei/p/4822166.html
Copyright © 2011-2022 走看看