php中如何将前台传入的png图片(不在后台生成png)直接导入到Excel中?

xueyuxiongshi 2017-12-01 01:40:47
最近在学习php项目中的导出报表的功能,将前台中的折线图传到后台导入到Excel中,目前已经实现的功能是需要在后台生成对应的图片才能将图片导入到Excel中(考虑到后台中会生成很多图片文件,以及多用户导出冲突等问题,这种方式不太合适),问题是:如何不在服务器上生成图片直接导入到Excel中?
...全文
289 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xueyuxiongshi 2017-12-04
不好意思现在才回复,版主大大果然厉害了,我的问题被完美解决,后台项目中没有生成图片,现在将我实现的代码贴出来供大家参考,谢谢大家的回答


$excel=new PHPExcel();//创建PHPExcel对象
/*
	文档的初始化设置....(省略)
	...
*/
$Sheet1 = $excel->createSheet();	//创建工作簿		
/*设置sheet的name*/
$Sheet1 ->setTitle('测试title');	
$objDrawing = new PHPExcel_Worksheet_MemoryDrawing();
$objDrawing->setName('Sample image');
$objDrawing->setDescription('Sample image');
//解码图片
//var_dump(base64_decode(strstr($group_vol_img,'base64,')));
$imgcode = "data:image/png;base64,iVBORw0KGgoAAAANSUhE...";		
$im = imagecreatefromstring(base64_decode(str_replace('data:image/png;base64,', '', $imgcode)));
$objDrawing->setImageResource($im);
$objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG);		////渲染方法
$objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);
$objDrawing->setHeight(300);		        //设置图片的高度
$objDrawing->setWidth(400);		        //设置图片的宽度
$objDrawing->setCoordinates('B2');	//设置图片所在表格位置
$objDrawing->setWorksheet($Sheet1);
  • 打赏
  • 举报
回复
xuzuning 2017-12-02
$input = 'data:image/png;base64,iVBORw0KGgoAAAANSUhE...'; $im = imagecreatefromstring(base64_decode(strstr($input, 'base64,'))); ...->setImageResource($im); 至于他内部是否使用了临时文件过渡,就不是我们该考虑的了(当然你可以去看源码)
  • 打赏
  • 举报
回复
xuzuning 2017-12-02
PHPExcel 文档中有这么一段,用于将 GD 绘制的图形放入单元格中 你可以仿此行事
4.6.42.	Add a GD drawing to a worksheet
There might be a situation where you want to generate an in-memory image using GD and add it to a PHPExcel worksheet without first having to save this file to a temporary location.

Here’s an example which generates an image in memory and adds it to the active worksheet:
// Generate an image
$gdImage = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
$textColor = imagecolorallocate($gdImage, 255, 255, 255);
imagestring($gdImage, 1, 5, 5,  'Created with PHPExcel', $textColor);

// Add a drawing to the worksheet
$objDrawing = new PHPExcel_Worksheet_MemoryDrawing();
$objDrawing->setName('Sample image');
$objDrawing->setDescription('Sample image');
$objDrawing->setImageResource($gdImage);
$objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG);
$objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);
$objDrawing->setHeight(36);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
  • 打赏
  • 举报
回复
小熊开发 2017-12-02
那就只有用EXCEL的VBA来实现BASE64转图片吧,这样在客户端执行就行了
  • 打赏
  • 举报
回复
xueyuxiongshi 2017-12-01
我在后台已经拿到而且生成了,但是我不想在后台生成,主要是服务器空间有限,再加上多个用户同时操作上传的文件可能会冲突
  • 打赏
  • 举报
回复
小熊开发 2017-12-01
        $base64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhE...';
        if (preg_match('/^data:image\/(\w+);base64,/', $base64, $matchs)){
            $pic = '保存路径/图片名.'. $matchs[1];
            file_put_contents($pic, base64_decode(str_replace($matchs[0], '', $base64)));
        }else{
            return false;
        }
  • 打赏
  • 举报
回复
小熊开发 2017-12-01
data:image/png;base64,iVBORw0KGgoAAAANSUhE... 正则提取图片格式为PNG 提取后面的iVBORw0KGgoAAAANSUhE... 然后 base64_decode(iVBORw0KGgoAAAANSUhE..),然后写入png文件就是图片了
  • 打赏
  • 举报
回复
一起混吧 2017-12-01
你在后台php拿到图片了吗,拿到了直接导入就是了
  • 打赏
  • 举报
回复
xueyuxiongshi 2017-12-01
我在前台已经转成这种格式了->(data:image/png;base64,iVBORw0KGgoAAAANSUhE...) ,应该怎么放到excel中去呢?
  • 打赏
  • 举报
回复
xuzuning 2017-12-01
上传后,本身就在服务器上生成了临时文件,直接导入就是了
  • 打赏
  • 举报
回复
老虎爱代码 2017-12-01
其实生成不成都可以吧,生成的话可以用类似uniqid()生成全局唯一的id用来作为图片保存的名称,然后导入图片,不生成的话也是可以的吧,直接把$_FILES['tmp_name']导入就可以了吧 $objDrawing = new \PHPExcel_Worksheet_Drawing(); $objDrawing->setPath($_FILES['tmp_name']);
  • 打赏
  • 举报
回复
相关推荐
发帖
基础编程
加入

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
申请成为版主
帖子事件
创建了帖子
2017-12-01 01:40
社区公告
暂无公告