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 PDO函数库详解
Apr 27 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
php实现socket推送技术的示例
Dec 20 PHP
thinkPHP事务操作简单案例分析
Oct 17 PHP
PHP高并发和大流量解决方案整理
Dec 24 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
Python lambda和Python def区别分析
2014/11/30 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
python3.6的venv模块使用详解
2018/08/01 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
Unix里面如何在后台运行程序
2016/10/14 面试题
模具毕业生推荐信
2014/02/15 职场文书
小学安全汇报材料
2014/08/14 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
商家认证委托书格式
2014/10/16 职场文书
房地产项目合作意向书
2015/05/08 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
结婚十年感言
2015/07/31 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
详解Python为什么不用设计模式
2021/06/24 Python
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python