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 相关文章推荐
PHP个人网站架设连环讲(四)
Oct 09 PHP
php strlen mb_strlen计算中英文混排字符串长度
Jul 10 PHP
PHP教程 变量定义
Oct 23 PHP
简单的PHP多图上传小程序代码
Jul 17 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
PHP递归调用的小技巧讲解
Feb 19 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
ThinkPHP实现分页功能
Apr 28 PHP
PHP调用微博接口实现微博登录的方法示例
Sep 22 PHP
PHP attributes()函数讲解
Feb 03 PHP
PHP获取类私有属性的3种方法
Sep 10 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
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
PHP防盗链代码实例
2014/08/27 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
Python的gevent框架的入门教程
2015/04/29 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
基于python图像处理API的使用示例
2020/04/03 Python
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
数学教师个人总结
2015/02/06 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
如何在Python中妥善使用进度条详解
2022/04/05 Python