php文本转图片自动换行的方法


Posted in PHP onMarch 13, 2013

今天无意中浏览网面的时候发现一个长微博,它可以将文本转成png图片,于是乎就研究一下PHP文本转图片的方式,其实只要是用到了PHP的扩展库,GD库来生成图片,再通过图像函数生成,代码写出来后,发现如果文字太多了,图片就会超过屏幕的宽度,导致浏览器右拉条的出现,于是,想想有没有什么办法可以使图片能够自动换行,通过GG,发现了一篇文章,通过判断字符串和截取字符串再拼接起来实现文本图片自动换行,以下贴出此代码,以学习之中:

<?php
header ("Content-type: image/png");
mb_internal_encoding("UTF-8"); // 设置编码
function autowrap($fontsize, $angle, $fontface, $string, $width) {
// 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度
 $content = "";
 // 将字符串拆分成一个个单字 保存到数组 letter 中
 for ($i=0;$i<mb_strlen($string);$i++) {
  $letter[] = mb_substr($string, $i, 1);
 }
 foreach ($letter as $l) {
  $teststr = $content." ".$l;
  $testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
  // 判断拼接后的字符串是否超过预设的宽度
  if (($testbox[2] > $width) && ($content !== "")) {
   $content .= "\n";
  }
  $content .= $l;
 }
 return $content;
}
$bg = imagecreatetruecolor(300, 290); // 创建画布
$white = imagecolorallocate($bg, 255, 255, 255); // 创建白色
$text = "前段时间练习使用 PHP 的 GD 库时,为了文本的自动换行纠结了很久。虽然可以通过插入 \n 实现换行,但考虑到文本中既有中文又有英文,强制限定每多少个文字就换行的效果很差。后来终于找到了一个英文下的自动换行的方法,其大概原理是将空格作为分隔符,将字符串分割为一个个单词,然后再一个接一个地拼接在一起,判断其长度是否超过画布,若超过则换行再拼接,否则继续拼接。考虑到中文需要将每个文字都拆开,所以我进行了一点修改,完整代码如下。";
$text = autowrap(12, 0, "simsun.ttc", $text, 280); // 自动换行处理
// 若文件编码为 GB2312 请将下行的注释去掉
// $text = iconv("GB2312", "UTF-8", $text);
imagettftext($bg, 12, 0, 10, 30, $white, "simsun.ttc", $text);
imagepng($bg);
imagedestroy($bg);
?>
PHP 相关文章推荐
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
Dec 25 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
Yii中CGridView禁止列排序的设置方法
Jul 12 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
php源码的使用方法讲解
Sep 26 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 #PHP
php 生成唯一id的几种解决方法
Mar 08 #PHP
PHP Directory 函数的详解
Mar 07 #PHP
PHP重定向的3种方式
Mar 07 #PHP
file_get_contents获取不到网页内容的解决方法
Mar 07 #PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 #PHP
php设置编码格式的方法
Mar 05 #PHP
You might like
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
PHP常用的缓存技术汇总
2014/05/05 PHP
php实现的操作excel类详解
2016/01/15 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
PHP 实现缩略图
2021/03/09 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
如何定义TensorFlow输入节点
2020/01/23 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
大学四年学习的自我评价分享
2013/12/09 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
办公室主任个人总结
2015/02/28 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript