簡體   English   中英

使用bufferedimage java設置圖像src

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM