java - 在一个 JPG 文件中导出多张图像

标签 java jsp arrays jfreechart

我有一个 JSP,允许用户导出一些数据。您可以选择不同的格式(excel、csv)。另外,用excel导出与数据相对应的图表(饼图、折线图和条形图)用户希望将图表导出到唯一的jpg文件中。

我所做的是(全部用Java):

  • 使用 JFreeChart 生成图表
  • 使用以下命令将图表转换为 JPG 图像:ChartUtilities.saveChartAsJPEG
  • 然后我检索图像字节:

代码:

InputStream is = null;
try {
   is = new FileInputStream(image);
}catch (FileNotFoundException e) {
   e.printStackTrace();
}
byte[] bytes = null;
try {
   bytes = IOUtils.toByteArray(is);
}catch (IOException e) {
   e.printStackTrace();
}

这运行良好,我有每个图表的字节。然后我将每个图表的字节放入字节数组中:

byte[] imageBytes = getImageAsBytes(chart1,chart2,chart3);
res.setContentType("image/jpg");
res.setHeader("Content-Disposition", "attachment; filename=" + "MyCharts" + ".jpg");
res.setContentLength(imageBytes.length);
try{
    OutputStream output = res.getOutputStream();
    output.write(imageBytes);
    output.flush();   
    output.close();  
} catch (IOException e) {
    e.printStackTrace();
}

问题是:当我打开 JPG 时,仅显示一张图像。我测试了每个图表的导出并且运行良好,但是当我放置所有图表字节时,仅显示一个图像(始终是 imageBytes 数组中的第一个图像)

我不知道是否必须创建某种 Canvas ,或者只是不可能通过这种方式将 3 个或更多图像放入同一个 JPG 中。

最佳答案

JPG 文件格式不会让您逃脱惩罚。我的建议是创建一个新的 BufferedImage,其 Canvas 足够大以包含所有三个图像,以交错的 Y 轴偏移将三个图像渲染到其上,然后使用 ImageIO 将其转储为 JPG。

关于java - 在一个 JPG 文件中导出多张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797386/

相关文章:

javascript替换

java - 静态初始化程序在 JUnit 测试期间不运行

java - 在运行时重定向方法调用以引入某种沙箱

jsp - 如何让嵌入的 Jetty 9 成功解析 JSTL URI?

java - 使用Servlet-JSP登录

PHP OOP 使用 mysql 从数据库中获取数组

php - 在分辨率数组中找到具有最接近宽高比的最接近的较大分辨率

java - 为什么 JPA/hibernate 不能映射到 MySQL blob 类型?

Java Freemaker 空间数量

jsp - JSTL 继续,在 foreach 内部中断