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;
    }
相关推荐
QC班长4 小时前
Maven公司私库配置踩坑点
java·服务器·maven·intellij-idea
Makoto_Kimur4 小时前
java开发面试-AI Coding速成
java·开发语言
wuqingshun3141595 小时前
说说mybatis的缓存机制
java·缓存·mybatis
空中海5 小时前
Kubernetes 生产实践、可观测性与扩展入门
java·贪心算法·kubernetes
Devin~Y5 小时前
大厂Java面试实录:Spring Boot/Cloud、Kafka、Redis、K8s 与 Spring AI(RAG/Agent)三轮连环问
java·spring boot·redis·mysql·spring cloud·kafka·kubernetes
bLEd RING6 小时前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
小松加哲6 小时前
Spring MVC 核心原理全解析
java·spring·mvc
Ulyanov6 小时前
《PySide6 GUI开发指南:QML核心与实践》 第二篇:QML语法精要——构建声明式UI的基础
java·开发语言·javascript·python·ui·gui·雷达电子对抗系统仿真
码界筑梦坊6 小时前
357-基于Java的大型商场应急预案管理系统
java·开发语言·毕业设计·知识分享
云烟成雨TD6 小时前
Spring AI Alibaba 1.x 系列【31】集成 Studio 模块实现可视化 Agent 调试
java·人工智能·spring