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 相关文章推荐
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
thinkphp普通查询与表达式查询实例分析
Nov 24 PHP
PHP对文件进行加锁、解锁实例
Jan 23 PHP
php动态生成版权所有信息的方法
Mar 24 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
Java中final关键字详解
Aug 10 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
php实现批量修改文件名称的方法
Jul 23 PHP
php封装一个异常的处理类
Jun 08 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
PHPMailer 中文使用说明小结
2010/01/22 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
PHP session 会话处理函数
2016/06/06 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
Python爬取三国演义的实现方法
2016/09/12 Python
Python中正则表达式详解
2017/05/17 Python
python通过zabbix api获取主机
2018/09/17 Python
python如何制作英文字典
2019/06/25 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
户外亲子活动策划方案
2014/02/07 职场文书
银行进社区活动总结
2014/07/07 职场文书
惊天动地观后感
2015/06/10 职场文书
自书遗嘱范文
2015/08/07 职场文书
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android