java导入excel图片处理

直接看代码吧,主要逻辑吧excel的图片拿到 压缩上传获取url

java 复制代码
 // 将文件转成XSSFWorkbook工作簿
        XSSFWorkbook wb = new XSSFWorkbook(uploadFile);
        // 获取工作薄中第一个excel表格
        XSSFSheet sheet = wb.getSheetAt(0);
        // 核心:::获取excel表格中所有图片,处理图片上传到oss  key:行号-列号
        Map<String, List<String>> picturesMap = getPictures(sheet);
        public Map<String, List<String>> getPictures(XSSFSheet xssfSheet) throws IOException {

        Map<String, List<String>> maps = new LinkedHashMap<>();
        List<XSSFShape> list = xssfSheet.getDrawingPatriarch().getShapes();

        for (int i = 0; i < list.size(); i++) {
            XSSFPicture picture = (XSSFPicture) list.get(i);
            // 行号-列号
            XSSFClientAnchor xssfClientAnchor = (XSSFClientAnchor) picture.getAnchor();
            // 获取图片
            XSSFPictureData pdata = picture.getPictureData();
            byte[] data = pdata.getData();
            InputStream inputStream = new ByteArrayInputStream(data);
            byte[] scalePicLater = scalePics(inputStream,0.5,0.5);
            String url = ossFactory.build().upload(new ByteArrayInputStream(scalePicLater), IdUtil.objectId() + ".jpg");
            inputStream.close();

            // 行号-列号
            String key = xssfClientAnchor.getRow1() - 1 + "-" + xssfClientAnchor.getCol1();
            if (maps.containsKey(key)) {
                List<String> strUrl = maps.get(key);
                strUrl.add(url);
                maps.put(key, strUrl);
            } else {
                List<String> strUrl = new ArrayList<>();
                strUrl.add(url);
                maps.put(key, strUrl);
            }


        }
        return maps;
    }




public static byte[] scalePics(InputStream inputStream, double accuracy,double scale) throws IOException {
        // 压缩图片并保存到临时文件中
        File tempFile = File.createTempFile("thumbnail", ".jpg");
        Thumbnails.of(inputStream)
                .scale(scale)
                .outputQuality(accuracy)
                .toFile(tempFile);
        // 读取临时文件的字节流设置到输出流中
        InputStream tempInputStream = new FileInputStream(tempFile);
        byte[] buffer = new byte[tempInputStream.available()];
        tempInputStream.read(buffer);
        tempInputStream.close();
        // 删除临时文件
        tempFile.delete();
        // 下载到本地,
        // BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Code\\upload\\1.jpg"));
        // bos.write(buffer);
        // bos.close();
        return buffer;
    }
相关推荐
李慕婉学姐3 分钟前
【开题答辩过程】以《智慧校园创新互助小程序的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·小程序
悟能不能悟31 分钟前
JAVA 对象转为二级制流,再转化为base64
java·开发语言
潲爺38 分钟前
Java-IO笔记
java·笔记·学习
JH307340 分钟前
静态资源映射相关问题解答
java
爬山算法42 分钟前
Hibernate(6) Hibernate支持哪些数据库?
java·数据库·hibernate
爱吃牛肉的大老虎1 小时前
Spring WebFlux与SpringMVC 对比讲解
java·后端·spring
QQ 31316378901 小时前
文华财经软件指标公式期货买卖信号提示软件
java·前端·javascript
老华带你飞1 小时前
房屋租赁管理系统|基于java+ vue房屋租赁管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
jqrbcts1 小时前
关于发那科机器人如何时时把角度发给PLC
java·服务器·网络·人工智能
TheITSea1 小时前
Java中的Optional:从入门到精通
java·开发语言