gpt4 book ai didi

java - 如何在不创建 File 对象的情况下将 BufferedImage 附加到 MimeBodyPart

转载 作者:行者123 更新时间:2023-12-03 22:05:44 26 4
gpt4 key购买 nike

我正在创建一个 BufferedImage我正在尝试将其包含在 MimeBodyPart
如下:

BufferedImage img=generateQR(otp);
messageBodyPart = new MimeBodyPart();
File test = new File("phill.png");
ImageIO.write(img, "png", test);
DataSource fds = new FileDataSource(test);
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setFileName("./phill.png");
messageBodyPart.setHeader("Content-ID", "<image>");
multipart.addBodyPart(messageBodyPart);
test.delete();

有没有办法附上 BufferedImage无需创建 File ?

请假设
  • generateQR() 存在
  • 有一个 HTML MimeBodyPart
  • 最佳答案

    按照建议,您可以从图像中获取字节,并使用相应的数据源。

    这是基于以下问题:

    Java- Convert bufferedimage to byte[] without writing to disk



    javamail problem: how to attach file without creating file

    你可能会得到类似的结果:

    byte[] imageBytes = ((DataBufferByte) img.getData().getDataBuffer()).getData();

    ByteArrayDataSource bds = new ByteArrayDataSource(imageBytes, "image/png");
    messageBodyPart.setDataHandler(new DataHandler(bds));
    messageBodyPart.setFileName("./phill.png");
    messageBodyPart.setHeader("Content-ID", "<image>");
    multipart.addBodyPart(messageBodyPart);

    编辑 :

    由于数据缓冲区可能并不总是 DataBufferByte ,您可以通过这种方式将图像数据放入字节数组中:

    代替
    byte[] imageBytes = ((DataBufferByte) img.getData().getDataBuffer()).getData();

    具有以下操作:
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(img, "png", baos);
    baos.flush();
    byte[] imageBytes= baos.toByteArray();
    baos.close();

    (示例灵感来自 How I can convert BufferedImage to a byte array without using files )

    关于java - 如何在不创建 File 对象的情况下将 BufferedImage 附加到 MimeBodyPart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57412317/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com