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 相关文章推荐
phpmyadmin操作流程
Oct 09 PHP
针对初学PHP者的疑难问答(2)
Oct 09 PHP
php基础知识:类与对象(2) 自动加载对象
Dec 13 PHP
php,ajax实现分页
Mar 27 PHP
PHP 柱状图实现代码
Dec 04 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
php 批量添加多行文本框textarea一行一个
Jun 03 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
Feb 12 PHP
PHP redis实现超迷你全文检索
Mar 04 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 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 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
jQuery中的常用事件总结
2009/12/27 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
js如何打印object对象
2015/10/16 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
python 重定向获取真实url的方法
2018/05/11 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
Linux的文件类型
2012/03/07 面试题
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
Java死锁的排查
2022/05/11 Java/Android