#导出多个图片到一个单元格中

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根据实体对象导出多张压缩图片相关推荐

  1. 使用EasyPoi导出Word文件,使用@Excel注释导出实体对象图片的解决方案

    目录 一.问题介绍 二.解决方案展示 1.准备Word模板文件 2.部分实体对象 3.重写EasyPoi中ExcelEntityParse类的createCells方法 4.导出Word文件的主逻辑 ...

  2. EasyExcel一单元格导出多图片

    这里导出excel需要使用阿里的EasyExcel组件,项目需要引入EasyExcel依赖,版本可自己选择,博主这里使用2.2.7版本 <dependency><groupId> ...

  3. 手把手教你如何玩转EasyExcel的导入和导出

    小蜗牛,今天爬了多远?不急,继续爬总会到达终点. 朋友们,今天学习了多久?别慌,保持学习才会看到更好的自己. 觉得我的文章还不错的,欢迎大家还可以关注我的微信公众号:Java菜鸟进阶之路 最近会写一个 ...

  4. SpringBoot中使用Easyexcel实现Excel导入导出功能(三)

    导出的数据包含有图片 导出excel表格的数据包含有图片,这种场景比较少.通Easyexcel实现这样的需求,我认为最简便的方法就是使用前面提到的自定义转换器(com.alibaba.excel.co ...

  5. ArcGIS教程:将时间可视化对象导出为视频

    将时间可视化对象导出为视频 可将时间可视化对象导出为音频视频交错格式 (.avi) 或 QuickTime (.mov) 视频文件. 有时根据要导出的时间可视化对象类型,需要将分辨率自定义为低于或高于 ...

  6. 基与easyExcel实现excel模版导出

    Easyexcel官方文档 excel模版位置: 模版数据填充处理:{.对应的实体对象字段名} <dependency><groupId>com.alibaba</gro ...

  7. PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化

    标签 PostgreSQL , ulimit , nofile , fs.nr_open , setrlimit 背景 数据库是一种非常庞大的应用系统,就拿PostgreSQL来说,每个实体对象(物化 ...

  8. hql查询之实体对象查询

    一.实体对象查询 实体对象查询是hql查询的基础,作为一种对象查询语言,在查询操作时和sql不同,查询字符串中的内容要使用类名和类的属性名来代替.这种查询方法相对简单,只要有SQL功底,使用hql是很 ...

  9. 基于EasyExcel锁定指定列导出数据到excel

    基于EasyExcel锁定指定列导出数据到excel 大家好,我是llp.最近在做系统报表时中有一个需求时这样的,需要查询系统数据导出excel,并要求导出的excel列中有一些时锁定的有一些时不锁定 ...

最新文章

  1. 【Java】Java枚举类型示例
  2. sockaddr与sockaddr_in的区别
  3. c语言 map转换成字符串数组,JSON数组形式字符串转换为ListMapString,String的几种方法...
  4. 如何在业务层实现响应缓存
  5. Java序列化魔术方法及其示例使用
  6. 什么是 NoSQL 数据库、NoSQL 与 SQL 的区别
  7. Oracle常用数据字典表
  8. iOSQuart2D绘图之UIImage简单使用
  9. delphi中griddata控件写入float数值_年中巨献!明道云发布多项重磅功能
  10. 你真的需要全栈开发吗?
  11. shell脚本中执行命令_如何在Shell脚本中执行命令?
  12. “4K”也有真假说法?历数那些年被忽悠的参数
  13. nginx、tomcat负载均衡
  14. java数组验证哥德巴赫猜想_java 验证哥德巴赫猜想
  15. 数字孪生 - 认知篇
  16. VMware虚拟机复制文件卡死的问题
  17. 记一次武汉科技大学ctf新手赛 wuctf2020
  18. arcgis中解决点位符号化时重叠冲突
  19. 股票筛选。如何查找股票?如何查找潜力股?
  20. 零基础如何入门IT行业?

热门文章

  1. uni-app+企业微信+用友U9ERP搭建H5应用(1)
  2. Docker在英雄联盟游戏中的实践探索(四)
  3. 2018四川计算机二本录取,2018年四川高考二本录取分数线最新公布
  4. Visual Studio制作安装程序教程
  5. nginx限流、配置管理、重定向、防盗链
  6. linux下的firewalld火墙的基本命令
  7. ubuntu16.04网络监控工具iptraf
  8. Project 2013 使用大全
  9. 索菲亚·阿莫鲁索 不良女青年的“逆袭”
  10. 2022中国居民退休准备指数为5.7,青年群体希望提早退休,居民对个人养老金制度缺乏了解但普遍支持 | 美通社头条...