[英]set image src using bufferedimage java
在Java應用程序中,我正在對話框中使用webview在HTML報告中顯示帶有圖像的文本。
該圖像是一個餅圖,以下函數將圖表轉換為緩沖圖像:
protected static BufferedImage draw(JFreeChart chart, int width, int height)
{
BufferedImage img = new BufferedImage(width , height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = img.createGraphics();
chart.draw(g2, new Rectangle2D.Double(0, 0, width, height));
g2.dispose();
return img;
}
我需要通過將圖像標簽的src設置為此圖像來在HTML內容中顯示該圖像:
.. <img src='" + draw(..) +"' alt=\"\" height=\"230\" width=\"390\">..
而且我無法提取該緩沖圖像的路徑。
在以這種方式進行操作之前,我嘗試將圖像保存在系統中,然后在image標簽中設置其路徑,但是問題是,當處理事件並導出圖像時,它第一次出現在報告中,第二次事件處理並導出圖像時,報告顯示舊圖像! 這是導出圖像時使用的功能:
public static void saveToFile(JFreeChart chart, String aFileName, int width, int height, double quality) throws FileNotFoundException, IOException {
BufferedImage img = draw( chart, width, height );
FileOutputStream fos = new FileOutputStream(aFileName);
JPEGImageEncoder encoder2 =
JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam param2 =
encoder2.getDefaultJPEGEncodeParam(img);
param2.setQuality((float) quality, true);
encoder2.encode(img,param2);
fos.close();
}
您可以使用ImageIO.write()
將圖像寫入文件,然后像這樣檢索byte[]
:
ImageIO.write(bufferedImage,"png",new File("tmpImage.png"));
byte[] imageBytes = Files.readAllBytes(Paths.get("tmpImage.png"));
然后使用Base64.Encoder
將圖像轉換為可以傳遞給html的base64字符串。 看看這個:
Base64.Encoder encoder = Base64.getEncoder();
String encoding = "data:image/png;base64," + encoder.encodeToString(imageBytes);
<img src='" + encoding +"' alt=\"\" height=\"230\" width=\"390\">.
您必須在實際編碼之前添加data:image/png;base64,
String
。 這告訴瀏覽器正在查看哪種數據
因此,在您的draw()
方法中,無需返回BufferedImage
,只需返回String
。 Base64對於此類事情非常方便,但確實有缺點。 存儲base64圖像時,它們比實際的圖像重一些。 幸運的是,使用此實現,base64將永遠不會碰到您的磁盤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.