PHP GD库生成图片自动换行函数,自动分页函数
/* 文字自动换行
* @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;
}
做一个心中有料的人.<shiyan_stz@163.com>
PHP GD库生成图片自动换行函数,自动分页函数的更多相关文章
- php学习笔记:利用gd库生成图片,并实现随机验证码
说明:一些基本的代码我都进行了注释,这里实现的验证码位数.需要用的字符串都可以再设置.有我的注释,大家应该很容易能看得懂. 基本思路: 1.用mt_rand()随机生成数字确定需要获取的字符串,对字符 ...
- PHP中GD库是做什么用的? PHP GD库介绍11111111
什么是gd库? gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据 ...
- GD库简介和使用
简介 php并不仅限于创建html输出,它也可以创建和处理包括GIF,PNG,jpef,wbmp以及xpm在内的多种格式的图像.更加方便的是,php可以直接将图像数据库输出到浏览器.要想在php中使用 ...
- 一起学习PHP中GD库的使用(一)
又到了一个大家非常熟悉的库了,对于图像图形的处理来说,GD 库是 PHPer 们绕不过去的一道坎.从很早很早的 CMS 或者 Discuz 时代,各类开源软件在安装的时候就会明确地指出 GD 库是它们 ...
- php使用GD库实现图片水印和缩略图——生成图片缩略图
今天呢,就来学习一下在php中使用PD库来实现对图片水印的文字水印方法,不需要PS哦! 首先,准备素材 (1)准备一张图片 (2)准备一张水印(最好是透明的,即背景是白色底) (3)准备一中字体(在电 ...
- 【C++实现python字符串函数库】一:分割函数:split、rsplit
[C++实现python字符串函数库]split()与rsplit()方法 前言 本系列文章将介绍python提供的字符串函数,并尝试使用C++来实现这些函数.这些C++函数在这里做单独的分析,最后我 ...
- 查看Linux下*.a库文件中文件、函数、变量
查看Linux下*.a库文件中文件.函数.变量等情况在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包 含哪些文件.函数.变量: 1. 查看文件:ar -t xxx.a 2. ...
- numpy函数库中一些经常使用函数的记录
##numpy函数库中一些经常使用函数的记录 近期才開始接触python,python中为我们提供了大量的库,不太熟悉.因此在<机器学习实战>的学习中,对遇到的一些函数的使用方法进行记录. ...
- php中GD库的一些简单使用
今天了解了一些GD库的简单使用,现在稍微做一下总结! GD库是什么?,graphic device,图像工具库,gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处 ...
随机推荐
- VS编辑器主题变换插件-EasyVS
主题功能是这个版本的亮点. 我收集了七个比较流行的编辑器主题样式,有了这个功能再也不用到网上寻找安装这样那样的主题了. 增加文件右键“在资源管理器中打开”功能 我们知道VS2010对文件夹支持“在资源 ...
- Baidu图表插件--Eharts使用(柱状图)
官网链接:http://echarts.baidu.com/index.html 官网的demo,api都很详细:我就分享下我的学习步骤 首先定义一个显示图标的区域: <div id=" ...
- TCP报文段的首部格式
首部20个字节的的固定部分,40个字节的可选部分 (1)源端口和目的端口 (2)序号(是字节流的编号,0-2^32-1),如果超过了mod2^32 (3)确认号:目的主机希望源主机收到的下一个字节序号 ...
- Android项目实战(三十一):异步下载apk文件并安装(非静默安装)
前言: 实现异步下载apk文件 并 安装.(进度条对话框显示下载进度的展现方式) 涉及技术点: 1.ProgressDialog 进度条对话框 用于显示下载进度 2.AsyncTask ...
- IOS高级开发~开机启动&无限后台运行&监听进程
一般来说, IOS很少给App后台运行的权限. 仅有的方式就是 VoIP. IOS少有的为VoIP应用提供了后台socket连接,定期唤醒并且随开机启动的权限.而这些就是IOS上实现VoIP App的 ...
- 对java数组的一些理解
刚开始学习Java的时候一直搞不清除获取数组的长度是用length()还是length,现在不妨来深入了解一下数组的真实面目. 我们不妨来看一下数组的源码,诶,数组的类名叫什么?我们声明一个int数组 ...
- Java I/O之NIO概念理解
JDK1.4的java.nio.*包引入了新的Java I/O新类库,其目的在于提高速度.实际上,旧的I/O包已经使用nio重新实现过,以便充分利用这种速度提高,因此即使我们不显式地用nio编码,也能 ...
- 数据库基础——(SQLserver)约束
数据库定义:一些存储在硬盘上的数据文件 内存:计算机临时存储的一些数据 .net - ...
- 转:js中cookie的使用详细分析
cookie机制将信息存储于用户硬盘,因此可以作为全局变量,这是它最大的一个优点.它可以用于以下几种场合. (1)保存用户登录状态.例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就 ...
- 快速排序 partition函数的所有版本比较
partition函数是快排的核心部分 它的目的就是将数组划分为<=pivot和>pivot两部分,或者是<pivot和>=pivot 其实现方法大体有两种,单向扫描版本和双向 ...