easyexcel根据实体对象导出多张压缩图片
#导出多个图片到一个单元格中
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.alibaba.excel.util.IoUtils;
import net.coobird.thumbnailator.Thumbnails;
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class ArrayListURLConverter implements Converter {
@Override
public Class supportJavaTypeKey() {return ArrayList.class;
}@Override
public CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.IMAGE;
}@Override
public ArrayList convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return null;
}@Override
public CellData convertToExcelData(ArrayList value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {List<CellData> list = new ArrayList<>();for (Object o : value) {CellData cellData = null;InputStream inputStream = null;try {String filePath = (String) o;if (filePath.toLowerCase().startsWith("http")) {URL url = new URL(filePath);inputStream = url.openStream();} else {File file = new File(filePath);if (!file.isFile() || !file.exists() || !file.canRead()) {return null;}inputStream = new FileInputStream(file);}byte[] bytes = IoUtils.toByteArray(inputStream);cellData = new CellData(compressPicForScale(bytes));cellData.setType(CellDataTypeEnum.IMAGE);list.add(cellData);}catch (Exception e){e.printStackTrace();} finally {if (inputStream != null) {inputStream.close();}}}CellData cellDataResult = new CellData(list);cellDataResult.setType(CellDataTypeEnum.IMAGE);return cellDataResult ;
}
#图片的压缩
public byte[] compressPicForScale(byte[] imageBytes) {if(imageBytes == null || imageBytes.length<=0||imageBytes.length<20*1024){return imageBytes;}long srcSize = imageBytes.length;double accuracy = getAccuracy(srcSize/1024);try {while (imageBytes.length>20*1024){ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes);ByteArrayOutputStream outputStream = new ByteArrayOutputStream(imageBytes.length);Thumbnails.of(inputStream).scale(accuracy).outputQuality(accuracy).toOutputStream(outputStream);imageBytes = outputStream.toByteArray();}}catch (Exception e){e.printStackTrace();}return imageBytes;
}/*** 自动调节精度* @param size* @return*/
public static double getAccuracy(long size){double accuracy;if(size < 900){accuracy = 0.85;}else if(size < 2047){accuracy = 0.6;}else if(size < 3275){accuracy = 0.44;}else{accuracy = 0.4;}return accuracy;
}
#数据导出方法
EasyExcel.write(fileName,clazz).excelType(ExcelTypeEnum.XLSX).sheet(sheetName).registerWriteHandler(horizontalCellStyleStrategy).registerWriteHandler(new CustomImageCellWriteHandler()).registerConverter(new ArrayListURLConverter()).registerWriteHandler(new CustomCellWriteHandler()).doWrite(data);
#创建实体对象
最后生成对象,调用数据导出方法即可。
easyexcel根据实体对象导出多张压缩图片相关推荐
- 使用EasyPoi导出Word文件,使用@Excel注释导出实体对象图片的解决方案
目录 一.问题介绍 二.解决方案展示 1.准备Word模板文件 2.部分实体对象 3.重写EasyPoi中ExcelEntityParse类的createCells方法 4.导出Word文件的主逻辑 ...
- EasyExcel一单元格导出多图片
这里导出excel需要使用阿里的EasyExcel组件,项目需要引入EasyExcel依赖,版本可自己选择,博主这里使用2.2.7版本 <dependency><groupId> ...
- 手把手教你如何玩转EasyExcel的导入和导出
小蜗牛,今天爬了多远?不急,继续爬总会到达终点. 朋友们,今天学习了多久?别慌,保持学习才会看到更好的自己. 觉得我的文章还不错的,欢迎大家还可以关注我的微信公众号:Java菜鸟进阶之路 最近会写一个 ...
- SpringBoot中使用Easyexcel实现Excel导入导出功能(三)
导出的数据包含有图片 导出excel表格的数据包含有图片,这种场景比较少.通Easyexcel实现这样的需求,我认为最简便的方法就是使用前面提到的自定义转换器(com.alibaba.excel.co ...
- ArcGIS教程:将时间可视化对象导出为视频
将时间可视化对象导出为视频 可将时间可视化对象导出为音频视频交错格式 (.avi) 或 QuickTime (.mov) 视频文件. 有时根据要导出的时间可视化对象类型,需要将分辨率自定义为低于或高于 ...
- 基与easyExcel实现excel模版导出
Easyexcel官方文档 excel模版位置: 模版数据填充处理:{.对应的实体对象字段名} <dependency><groupId>com.alibaba</gro ...
- PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化
标签 PostgreSQL , ulimit , nofile , fs.nr_open , setrlimit 背景 数据库是一种非常庞大的应用系统,就拿PostgreSQL来说,每个实体对象(物化 ...
- hql查询之实体对象查询
一.实体对象查询 实体对象查询是hql查询的基础,作为一种对象查询语言,在查询操作时和sql不同,查询字符串中的内容要使用类名和类的属性名来代替.这种查询方法相对简单,只要有SQL功底,使用hql是很 ...
- 基于EasyExcel锁定指定列导出数据到excel
基于EasyExcel锁定指定列导出数据到excel 大家好,我是llp.最近在做系统报表时中有一个需求时这样的,需要查询系统数据导出excel,并要求导出的excel列中有一些时锁定的有一些时不锁定 ...
最新文章
- 【Java】Java枚举类型示例
- sockaddr与sockaddr_in的区别
- c语言 map转换成字符串数组,JSON数组形式字符串转换为ListMapString,String的几种方法...
- 如何在业务层实现响应缓存
- Java序列化魔术方法及其示例使用
- 什么是 NoSQL 数据库、NoSQL 与 SQL 的区别
- Oracle常用数据字典表
- iOSQuart2D绘图之UIImage简单使用
- delphi中griddata控件写入float数值_年中巨献!明道云发布多项重磅功能
- 你真的需要全栈开发吗?
- shell脚本中执行命令_如何在Shell脚本中执行命令?
- “4K”也有真假说法?历数那些年被忽悠的参数
- nginx、tomcat负载均衡
- java数组验证哥德巴赫猜想_java 验证哥德巴赫猜想
- 数字孪生 - 认知篇
- VMware虚拟机复制文件卡死的问题
- 记一次武汉科技大学ctf新手赛 wuctf2020
- arcgis中解决点位符号化时重叠冲突
- 股票筛选。如何查找股票?如何查找潜力股?
- 零基础如何入门IT行业?
热门文章
- uni-app+企业微信+用友U9ERP搭建H5应用(1)
- Docker在英雄联盟游戏中的实践探索(四)
- 2018四川计算机二本录取,2018年四川高考二本录取分数线最新公布
- Visual Studio制作安装程序教程
- nginx限流、配置管理、重定向、防盗链
- linux下的firewalld火墙的基本命令
- ubuntu16.04网络监控工具iptraf
- Project 2013 使用大全
- 索菲亚·阿莫鲁索 不良女青年的“逆袭”
- 2022中国居民退休准备指数为5.7,青年群体希望提早退休,居民对个人养老金制度缺乏了解但普遍支持 | 美通社头条...