php 文字转图片-----长微博功能开发_ttf字体用的长微博-程序员宅基地

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

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;
        }

}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liumeng305/article/details/43512917

智能推荐

windoes_cmd_powershell_powershell ISE-程序员宅基地

文章浏览阅读771次,点赞16次,收藏21次。=安装完成后尝试执行然后确定该module可以正常载入cmd:3、验证Microsoft Defender防病毒是否正在运行 Get-Service -Name windefend验证防火墙保护是否已打开 Get-Service -Name mpssvc若要查看未运行的所有服务,请运行以下 PowerShell cmdlet:Windows 命令提示符sc start WinDefend Enable #命令启动下一步======

Linux服务器集群系统(三)_linux 如何检测服务器群集运行状态-程序员宅基地

文章浏览阅读1k次。LVS集群中的IP负载均衡技术章文嵩 ([email protected]) 2002 年 4 月本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)的工作原理,以及它们的优缺点。1.前言在 前面文章中,讲述了可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)..._linux 如何检测服务器群集运行状态

[PHP]得推家政派单系统 v2.4_php上门家政系统-程序员宅基地

文章浏览阅读89次。[PHP]得推家政派单系统 v2.4_php上门家政系统

实现串并数据CRC校验的四种Verilog_crc verilog 串行计算-程序员宅基地

文章浏览阅读1.1k次,点赞3次,收藏25次。目录我最推荐最后一种。1、CRC原理2.实现CRC校验的四种程序2.1并行实现 2.1.1模二除法实现CRC 2.1.2线性反馈移位寄存器LFSR实现CRC2.2处理串行数据 2.2.1模二除法实现CRC 2.2.2线性反馈移位寄存器LFSR实现CRC1、CRC原理模2运算原理模2加法:不考虑进位,按位加=按位异或---等价于---模2减法:不考虑借位,按位减=按位异或模2乘法:在将各个位乘的结果相加时按照模2加法来做模2除法:每一步商1后,减法使用的是..._crc verilog 串行计算

VMD-LSTM/LSTM基于变分模态分解和长短期记忆网络的时间序列预测(含LSTM、VMD-LSTM 模型的对比)。评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学_lstm模型中zim-程序员宅基地

文章浏览阅读414次。VMD-LSTM/LSTM基于变分模态分解和长短期记忆网络的时间序列预测(含LSTM、VMD-LSTM 模型的对比)。评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。_lstm模型中zim

如何一键转发朋友圈,快速转发朋友圈?_微信实现 朋友圈一键转发 csdn-程序员宅基地

文章浏览阅读1.2k次。在朋友圈卖货时,通常要转发朋友圈,都是把图片一张一张的保存下来,再复制渠道商的文案发布朋友圈。我觉得这样太繁琐太麻烦了,每天都会上新货,上传朋友圈都要花将近一个小时的时间,花了大量时间在转发上,还要接待顾客,把人忙得焦头烂额。当然有啊,跟圈功能就是好友发啥你自动跟着发啥,一键转发朋友圈只用一键点击就行,还可以修改文案,并且操作超级方便。点开【朋友圈】-【朋友圈互动】-点右上角【跟圈设置】3.设置跟圈任务,从微信号里选择要发圈的主号,再选择要跟圈的号。点击【朋友圈】-【朋友圈互动】-【转发】_微信实现 朋友圈一键转发 csdn

随便推点

QT总结_qtchar清除上一条线-程序员宅基地

文章浏览阅读1.2k次。总结(-)原文地址:http://www.cnblogs.com/cy568searchx/p/3501875.html1> 定时器的使用QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); // 设置定时器回调函数 timer->_qtchar清除上一条线

chroot Warning: cannot open /proc/net/dev (No such file or directory). Limited output._ifconfig: /proc/net/dev: no such file or directory-程序员宅基地

文章浏览阅读1.2w次。# ifconfigWarning: cannot open /proc/net/dev (No such file or directory). Limited outThread: A network problem about ubuntu chroot into CentOSThread ToolsDisplay_ifconfig: /proc/net/dev: no such file or directory

Ubuntu调整CPU程序调度和CPU频率的几种方法_ubuntu r如何设置cpu主频-程序员宅基地

文章浏览阅读5.8k次。CPU的调度策略调度策略1、FIFO队列:新增一个进程时,插入队列尾部,CPU每次从就绪队列头部获取进程,要么执行完切换到下一个进程,要么遇到IO交互,切换到下一个进程,将当前进程加入等待队列,直到IO返回再加入到就绪队列尾部,等待执行2、优先级队列:给每个进程赋予一个优先级序号,CPU切换时,在就绪队列查找优先级最高的进程并且派遣执行。优化优先级队列算法某些优先级低的进程一直无法获取到CP..._ubuntu r如何设置cpu主频

一文详解DHCP原理及配置_交换机的dhcp配置采用什么技术-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏8次。动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种用于集中对用户IP地址进行动态管理和配置的技术,省流:就是自动下发IP地址_交换机的dhcp配置采用什么技术

解决oh-my-zsh主题 powerlevel10k 不显示conda虚拟环境名字_解决oh-my-zsh主题powerlevel10k 不显示conda-程序员宅基地

文章浏览阅读1.1k次。然后在这里加上anaconda。_解决oh-my-zsh主题powerlevel10k 不显示conda

301. 任务安排2(算法竞赛进阶指南,斜率优化 DP)_算法进阶指南 任务安排 2-程序员宅基地

文章浏览阅读251次。一.题目链接:任务安排 2二.题目大意:中文题~~三.分析(划水):嘤嘤嘤,第一道斜率优化 DP.网上讲解很多了,大佬讲得也很棒,我就不造轮子了.四.代码实现:#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typed..._算法进阶指南 任务安排 2

推荐文章

热门文章

相关标签