java导入excel图片处理

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

 // 将文件转成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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,可以使用Apache POI库来导入Excel文件,并且该库也支持导入带有图片Excel文件。下面是一个简单的示例代码,演示如何导入带有图片Excel文件: ```java import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.util.IOUtils; public class ExcelImageImporter { public static void main(String[] args) throws IOException { InputStream inputStream = new FileInputStream("path/to/excel/file.xlsx"); Workbook workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 for (Row row : sheet) { for (Cell cell : row) { if (cell.getCellType() == Cell.CELL_TYPE_STRING && cell.getStringCellValue().startsWith("image_")) { // 如果单元格的值以"image_"开头,说明该单元格包含图片 byte[] imageBytes = cell.getSheet().getDrawingPatriarch().getImages().get(0).getData(); // 从单元格获取图片数据 // 这里假设只有一张图片,如果有多张图片可以使用循环遍历 // imageBytes即为导入图片数据 // 接下来可以将图片数据保存到文件或者数据库 } } } IOUtils.closeQuietly(inputStream); // 关闭输入流 workbook.close(); // 关闭工作簿 } } ``` 在上面的示例代码,我们遍历了Excel文件的每个单元格,如果单元格的值以"image_"开头,就说明该单元格包含图片。接着,我们从该单元格获取图片数据,并对其进行处理。这里我们只是简单地获取了图片数据,实际应用可以将图片数据保存到文件或者数据库,具体实现方式可以根据需求进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值