Based on the answer to this question, I found a working solution.
1. Include links to Batik SVG Toolkit jars
2. Implement your own transcoder
(based on this answer by Devon_C_Miller )
class MyTranscoder extends ImageTranscoder { private BufferedImage image = null; @Override public BufferedImage createImage(int w, int h) { image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); return image; } @Override public void writeImage(BufferedImage img, TranscoderOutput out) { } public BufferedImage getImage() { return image; }
}
3. Get BufferedImage from your svg
(based on a hint of this answer by John Doppelmann )
String uri = "path_to_svg/some.svg"; MyTranscoder transcoder = new MyTranscoder(); TranscodingHints hints = new TranscodingHints(); hints.put(ImageTranscoder.KEY_WIDTH, 20f);
4. Create an InputStream from BufferedImage
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); JPEGImageEncoder imageEncoder = JPEGCodec.createJPEGEncoder(outputStream); imageEncoder.encode(bufferedImage); byte[] bytes = outputStream.toByteArray(); InputStream inputStream = new ByteArrayInputStream(bytes);
5. Add an image to ImageView
//javafx.scene.image.Image Image image = new Image(inputStream); //javafx.scene.image.ImageView ImageView imageView = new ImageView(); imageView.setImage(image); this.getChildren().add(imageView);
Hope this helps!
source share