2017-05-01 4 views
1

를 사용 src에 내가세트 이미지 Java 응용 프로그램에서의 BufferedImage 자바

이미지는 원형 차트입니다 .. 대화 상자 내부에 웹뷰를 사용하여 HTML 보고서에서 이미지와 텍스트를 표시하고있어, 다음과 같은 기능을 차트로 변환 BufferedImage의 :

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\">.. 

및 그 광 경로를 추출 할 수 없습니다 ered 이미지 ..

이 방법을 사용하기 전에 이미지를 시스템에 저장 한 다음 이미지 태그에 경로를 설정하려고했지만 이벤트가 처리되고 이미지를 내보낼 때 문제가 발생했습니다. 처음으로 보고서, 두 번째 시간에 이벤트 handeled 및 이미지를 내보낼 보고서는 이전 이미지를 보여줍니다! 이 이미지 수출 사용한 기능입니다 : byte[]과 같이 당신은 검색 후 ImageIO.write()를 사용하여 이미지를 파일에 쓸 수

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(); 

    } 

답변

2

가 :

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는 절대 디스크에 닿지 않습니다.

+0

오류가 발생합니다. java.awt.image.DataBufferInt를 java.awt.image.DataBufferByte로 캐스팅 할 수 없습니다. –

+0

@MIBMinion 짧은 시간 동안 이미지를 디스크에 쓸 수 있습니까? – CraigR8806

+0

예 .. 제 질문의 마지막 섹션을 확인하십시오 –

관련 문제