php把数据放在图片里面,PHP利用GD库把数据生成图片表格,

先上生成的效果,免得不是各位看官要的效果

8e5e7d8b2fdc8e71e718a8a479943a2a.png

所有参数单独配置,$params为动态参数,$base为静态参数,很容易扩展成多行多列的表格

/**

* 生成表格

*/

public function create_table($params)

{

$data = array();//生成演示数据

for($i = 0;$i < 10; $i++){

$data[] = [

'nice_name' => '测试名' . $i,

'zhuang' => 100,

'xian' => 50,

'he' => 50,

'zhuang_dui' => 500,

'xian_dui' => 5000,

];

}

$params = [

'row' => 11,//数据的行数

'file_name' => 'xuju.png',

'title' => '数据核对表',

'table_time' => '2018-4-29 22:50:43',

'data' => $data

];

$base = [

'border' => 10,//图片外边框

'file_path' => 'public/create_image/check/12/',//图片保存路径

'title_height' => 30,//报表名称高度

'title_font_size' => 16,//报表名称字体大小

'font_ulr' => 'resources/fonts/simhei.ttf',//字体文件路径

'text_size' => 12,//正文字体大小

'row_hight' => 30,//每行数据行高

'filed_id_width' => 60,//序号列的宽度

'filed_name_width' => 120,//玩家名称的宽度

'filed_data_width' => 100,//数据列的宽度

'table_header' => ['序号','昵称','数据1','数据2','数据3','数据4','数据5'],//表头文字

'column_text_offset_arr' => [45,90,55,55,55,65,65],//表头文字左偏移量

'row_text_offset_arr' => [50,110,90,90,90,90,90],//数据列文字左偏移量

];

$base['img_width'] = $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 5 + $base['border'] * 2;//图片宽度

$base['img_height'] = $params['row'] * $base['row_hight'] + $base['border'] * 2 + $base['title_height'];//图片高度

$border_top = $base['border'] + $base['title_height'];//表格顶部高度

$border_bottom = $base['img_height'] - $base['border'];//表格底部高度

$base['column_x_arr'] = [

$base['border'] + $base['filed_id_width'],//第一列边框线x轴像素

$base['border'] + $base['filed_id_width'] + $base['filed_name_width'],//第二列边框线x轴像素

$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 1,//第三列边框线x轴像素

$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 2,//第四列边框线x轴像素

$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 3,//第五列边框线x轴像素

$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 4,//第五列边框线x轴像素

$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 5,//第五列边框线x轴像素

];

$img = imagecreatetruecolor($base['img_width'], $base['img_height']);//创建指定尺寸图片

$bg_color = imagecolorallocate($img, 255, 255, 190);//设定图片背景色

$text_coler = imagecolorallocate($img, 0, 0, 0);//设定文字颜色

$border_coler = imagecolorallocate($img, 0, 0, 0);//设定边框颜色

$white_coler = imagecolorallocate($img, 255, 255, 255);//设定边框颜色

imagefill($img, 0, 0, $bg_color);//填充图片背景色

//先填充一个黑色的大块背景

imagefilledrectangle($img, $base['border'], $base['border'] + $base['title_height'], $base['img_width'] - $base['border'], $base['img_height'] - $base['border'], $border_coler);//画矩形

//再填充一个小两个像素的 背景色区域,形成一个两个像素的外边框

imagefilledrectangle($img, $base['border'] + 2, $base['border'] + $base['title_height'] + 2, $base['img_width'] - $base['border'] - 2, $base['img_height'] - $base['border'] - 2, $bg_color);//画矩形

//画表格纵线 及 写入表头文字

foreach($base['column_x_arr'] as $key => $x){

imageline($img, $x, $border_top, $x, $border_bottom,$border_coler);//画纵线

imagettftext($img, $base['text_size'], 0, $x - $base['column_text_offset_arr'][$key] + 1, $border_top + $base['row_hight'] - 8, $text_coler, $base['font_ulr'], $base['table_header'][$key]);//写入表头文字

}

//画表格横线

foreach($params['data'] as $key => $item){

$border_top += $base['row_hight'];

imageline($img, $base['border'], $border_top, $base['img_width'] - $base['border'], $border_top, $border_coler);

imagettftext($img, $base['text_size'], 0, $base['column_x_arr'][0] - $base['row_text_offset_arr'][0], $border_top + $base['row_hight'] - 10, $text_coler, $base['font_ulr'], $key + 1);//写入序号

$sub = 0;

foreach ($item as $value){

$sub++;

imagettftext($img, $base['text_size'], 0, $base['column_x_arr'][$sub] - $base['row_text_offset_arr'][$sub], $border_top + $base['row_hight'] - 10, $text_coler, $base['font_ulr'], $value);//写入data数据

}

}

//计算标题写入起始位置

$title_fout_box = imagettfbbox($base['title_font_size'], 0, $base['font_ulr'], $params['title']);//imagettfbbox() 返回一个含有 8 个单元的数组表示了文本外框的四个角:

$title_fout_width = $title_fout_box[2] - $title_fout_box[0];//右下角 X 位置 - 左下角 X 位置 为文字宽度

$title_fout_height = $title_fout_box[1] - $title_fout_box[7];//左下角 Y 位置- 左上角 Y 位置 为文字高度

//居中写入标题

imagettftext($img, $base['title_font_size'], 0, ($base['img_width'] - $title_fout_width)/2, $base['title_height'], $text_coler, $base['font_ulr'], $params['title']);

//写入制表时间

imagettftext($img, $base['text_size'], 0, $base['border'], $base['title_height'], $text_coler, $base['font_ulr'], '时间:' . $params['table_time']);

$save_path = $base['file_path'] . $params['file_name'];

if(!is_dir($base['file_path']))//判断存储路径是否存在,不存在则创建

{

mkdir($base['file_path'],0777,true);//可创建多级目录

}

imagepng($img,$save_path);//输出图片,输出png使用imagepng方法,输出gif使用imagegif方法

echo '

'.%24save_path.'';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值