我有一个 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/