/* 文字自动换行

* @param $card 画板

* @param $pos 数组,top距离画板顶端的距离,fontsize文字的大小,width宽度,left距离左边的距离,hang_size行高

* @param $str 要写的字符串

* @param $iswrite  是否输出,ture,  花出文字,false只计算占用的高度

* @param $nowHeight  已写入行数;

* @param $second  数组 left  记录换行后据x坐标 ,width 记录换行后最大宽; , maxline 记录最大允许最大行数

* @return 数组 tp:本次写入行数  nowHeight:一共写入行数  residueStr:截取未写完的字符串 height:最后一行据顶部的高度

*/

function textalign($card, $pos, $str, $iswrite,$fontpath,$nowHeight,$second){

$_str_h = $pos["top"];//文字在整个图片距离顶端的位置,也就是y轴的像素距离

$fontsize = $pos["fontsize"];//文字的大小

$width = $pos["width"];//设置文字换行的宽带,也就是多宽的距离,自动换行

$margin_lift = $pos["left"];//文字在整个图片距离左边的位置,也就是X轴的像素距离

$hang_size = $pos["hang_size"];// 这个是行高

$temp_string = "";

$secondCk = ""; //换号的标示,已换行true ,未换行false;

$font_file =$fontpath;//字体文件,在我的同级目录的Fonts文件夹下面

$tp = 0;

$font_color = imagecolorallocate($card, $pos["color"][0], $pos["color"][1], $pos["color"][2]);

for ($i = 0; $i < mb_strlen($str,'utf8'); $i++) {

$box = imagettfbbox($fontsize, 0, $font_file, $temp_string);

$_string_length = $box[2] - $box[0];

$temptext = mb_substr($str, $i, 1,'utf-8');//拆分字符串

$temp = imagettfbbox($fontsize, 0, $font_file, $temptext);//用来测量每个字的大小

if($secondCk){//如果换行,进入判断赋值

if(is_array($second)){//如果传入换行后参数,则使用.

$width = $second['width'];

$margin_lift = $second['left'];

}

}

if($second['maxline']){

//如果已经写入最大行数

if($nowHeight == $second['maxline']){

//获取原字符串长度

$strlong = mb_strlen($str,'utf8');

//抓取剩余字符串

$residueStr ='';

$residueStr .= mb_substr($str, $i, $strlong - $i,'utf-8');

$cc = $strlong - $i;

break;

}

}

if ($_string_length + $temp[2] - $temp[0] < $width) {

$temp_string .= mb_substr($str, $i, 1,'utf-8');

if ($i == mb_strlen($str,'utf8') - 1) {

$_str_h += $hang_size;

$tp++;//用来记录有多少行

$nowHeight++;//记录一共写入多少行

if ($iswrite) {//如果传入的参数是false,只做测量,不进行绘制输出

imagettftext($card, $fontsize, 0, $margin_lift, $_str_h, $font_color, $font_file, $temp_string);

}

}

} else {

$texts = mb_substr($str, $i, 1,'utf-8');

$isfuhao = preg_match("/[\\pP]/u", $texts) ? true : false;//用来判断最后一个字是不是符合,

if ($isfuhao) {//如果是符号,我们就不换行,把符合添加到最后一个位置去

$temp_string .= $texts;

} else {

$i--;

}

$_str_h += $hang_size;

$tp++;

$nowHeight++;//记录一共写入多少行

if($iswrite){

imagettftext($card, $fontsize, 0, $margin_lift, $_str_h, $font_color, $font_file, $temp_string);

}

$temp_string = "";

$secondCk = true;//作为是否已换行的标志

}

}

$strdata['tp'] = $tp ;

$strdata['residueStr'] = $residueStr ;

$strdata['nowHeight'] = $nowHeight ;

$strdata['height'] = $_str_h;

return $strdata;

}

做一个心中有料的人.

php生成图片表格自动换行_PHP GD库生成图片自动换行函数,自动分页函数相关推荐

  1. php生成图片表格自动换行_php文本转图片自动换行的方法代码

    php文本转图片自动换行的方法代码 最近做了一个项目,把文字生成到图片上,发现长的文本会不换行,于是乎就研究一下PHP文本转图片的方式,其实只要是用到了PHP的扩展库,GD库来生成图片,再通过图像函数 ...

  2. PHP GD库 生成图片水印

    * index.php <?php /*** Created by PhpStorm.* User: mingzhanghui* Date: 9/24/2019* Time: 12:47*/in ...

  3. ubuntu php5 gd库,Ubuntu下php使用GD库笔记

    首先是查看GD库有没有被正确的安装和加载.通过gd_info()可以看,或者phpinfo.在phpinfo中可以看到gd一栏,然后版本如果是 bundled (2.0.34 compatible) ...

  4. php table生成图片,php不用GD库生成当前时间的PNG格式图象的程序

    php不用GD库生成当前时间的PNG格式图象的程序 更新时间:2008年09月28日 14:40:24   作者: 该程序是不用GD库可以生成当前时间的PNG格式图象,给人大开眼界,很有参考价值. t ...

  5. PHP使用GD库绘制表格(可根据数据自适应)

    ps:真是代码写的久了什么需求都会遇得上,木得办法 需求是需要用图片表格的样式展示数据,先看效果图: 就是一个表格,但是需要用图片的方式进行展示,再次感叹PHP的GD库真是异常强大!!! 先说完成的功 ...

  6. php imagettftext 中文,php的GD库imagettftext函数解决中文乱码问题,_PHP教程

    php的GD库imagettftext函数解决中文乱码问题, 本文实例讲述了php的GD库imagettftext函数解决中文乱码问题的方法.分享给大家供大家参考.具体如下: 使用imagettfte ...

  7. centos php gd库,Centos 编译安装GD库

    详细编译安装GD库整个过程,让php对更多图形方面gif jpg(jpeg) png wbmp xml 和 ttf字体 的支持. 我先启动CentOS5.3 Linux 可以说如果要配置一台LAMP服 ...

  8. Web前端技巧分享:教你用GD库生成验证码

    验证码相信大家都不会陌生,在网站登录的时候经常会遇到.那么你知道这个验证码是如何实现的吗?下面小千就为大家介绍一下这个GD库,还有一些常见的图片水印也是用GD实现的哦! GD库是什么? GD库是php ...

  9. linux php gd库安装,Linux系统gd库安装步骤说明

    gd库是PHP处理图形的扩展库,它提供了一系列用来处理图片的API(应用程序编程接口),使用gd库可以处理图片或者生成图片.在网站上,gd库通常用来生成缩略图,或者对图片加水印,或者生成汉字验证码,或 ...

最新文章

  1. 矩阵快速幂+构造方法
  2. ATS中开启Refer防盗链功能
  3. 大四学生对于股票的思考
  4. ssrs报表服务器数据库配置文件,创建报表服务器数据库(SSRS 配置管理器)
  5. Win10用Windows照片查看程序打开图片+更改注册表后导致Win10任务栏Adobe PDF阅读器图标显示异常
  6. kivy中文手册python_K-Meleon
  7. RESTful  Web APIs设计风格
  8. Python100道经典练习题(附PDF)
  9. 中文版modbus测试软件,Modbus调试工具
  10. 「 Matlab 」矩阵运算讲解
  11. 公共DNS推荐及dns测速
  12. OSChina 周四乱弹 —— 月中发工资还没到家……
  13. 酷的计算机名字,微信网名最酷的名字
  14. Unity3D 材质球设置参数无效果的解决方法
  15. python中output使用_Python使用input() output()函数输入、输出数据记录
  16. github干货地址分享
  17. Ubuntu与开发板上的NFS安装与使用
  18. springboot项目中使用Echarts实现数据折现可视化
  19. 关于Windows Phone 7推广策略的失误
  20. 单招面试你为什么报考计算机专业,单招面试问题你为什么选择我们学校

热门文章

  1. 原创如何解决内存不能为“read”或“written”
  2. WKWebview的那些坑之白屏问题
  3. 移动机器人 | 手势识别
  4. C语言实现数据结构——链队列
  5. 学ajax要学php吗,PHP学习
  6. Flash 与数学:星形线
  7. cocos2dx学习小结
  8. 【Unity 3D】使用EasyAR实现单图识别的AR增强现实功能(附实现步骤)
  9. ICS/SCADA虚拟化的安全性影响:调查和未来趋势
  10. ubuntu与主机ping不通的解决办法(主机检测不到虚拟网卡)