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 相关文章推荐
做一个有下拉功能的留言版
Oct 09 PHP
php目录操作函数之获取目录与文件的类型
Dec 29 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
PHP实现的曲线统计图表示例
Nov 10 PHP
php获取excel文件数据
Apr 21 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 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
PHP 开发工具
2006/12/06 PHP
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
分享3个php获取日历的函数
2015/09/25 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
如何通过python计算圆周率PI
2020/11/11 Python
思想政治自我鉴定
2013/10/06 职场文书
医务人员自我评价
2014/01/26 职场文书
仲裁协议书
2014/09/26 职场文书
党建工作整改措施
2014/10/28 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
2015年大学生工作总结
2015/04/21 职场文书
中秋节感想
2015/08/10 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
JavaScript流程控制(循环)
2021/12/06 Javascript
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js