2012-08-03 77 views
1

我有一個JSP允許用戶導出一些數據。你可以選擇不同的格式(excel,csv)。另外,用excel導出與數據對應的圖表(餅圖,折線圖和條形圖)用戶想要將圖表導出爲獨特的jpg文件。在一個JPG文件中導出多個圖像

我所做的是(全部在Java中):

  • 使用JFreeChart的
  • 生成圖表使用圖表轉換成JPG圖片:ChartUtilities.saveChartAsJPEG
  • 然後我找回theimage字節:

代碼:

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數組中的第一個圖像)

我不知道是否需要創建某種或者僅僅是不可能通過這種方式在相同的JPG中放置3張或更多圖像。

+1

如果您正在討論將多個圖像放入一個文件內的單獨隔間中,則JPEG不支持此操作。您將需要使用TIFF。 – 2012-08-03 14:11:18

回答

1

JPG文件格式不會讓你逃脫。我的建議是用一個足夠大的畫布創建一個新的BufferedImage,以包含所有三個圖像,將三個圖像以交錯的Y軸偏移渲染到它上面,然後將其轉儲爲JPG,格式爲ImageIO

+0

但是我怎麼能附上這個ImageIO?因爲在這種方式下,我必須使用類似於:ImageIO.write(myImage,「jpg」,新文件( 「some path」));但我不想將圖像保存在任何路徑中,我想要在瀏覽器上下載圖像 – Noelia 2012-08-03 14:35:16

+0

您可以使用採用'OutputStream'的寫入方法,並從您的servlet響應中傳遞流:http:// docs.oracle.com/javase/1.4.2/docs/api/javax/imageio/ImageIO.html#write(java.awt.image.RenderedImage,%20java.lang.String,%20java.io.OutputStream) – stevevls 2012-08-03 15:44:56

相關問題