Могу ли я использовать SVG Salamander для растеризации SVG в файлы PNG?
Я видел это, потому что SVG-Salamander достаточно мал для моих проектов. Но я не знаю, смогу ли я использовать это для этого, ни как это сделать.
Я использую этот код:
public static void main(String[] args) throws IOException, SVGException {
// TODO Auto-generated method stub
File f = new File("./src/game_scheme.svg");
SVGUniverse svgUniverse = new SVGUniverse();
SVGDiagram diagram = svgUniverse.getDiagram(svgUniverse.loadSVG(f.toURL()));
BufferedImage bi = new BufferedImage(320, 240, BufferedImage.TYPE_INT_ARGB);
Graphics2D ig2 = bi.createGraphics();
diagram.render(ig2);
ImageIO.write(bi, "PNG", new File("./yourImageName.png"));
}
Но изображения не гладкие:(, есть идеи?
2 ответа
Да, это возможно. Все, что вам нужно сделать, это загрузить ваш SVG-документ с помощью SVG Salamander, создать BufferedImage, в который вы хотите записать, создать контекст Graphics2D из вашего BufferedImage, а затем вызвать метод render() в SVGDiagram для рисования на вашем изображении.
Вы можете упростить процесс с помощью SVGIcon. Он будет обрабатывать все внутреннее устройство Salamander для вас, и вы можете рассматривать ваш SVG-документ как обычный Swing Icon.
Если вы планируете конвертировать много файлов SVG в изображения в командной строке, есть также задача Ant, которая позволит вам конвертировать SVG в изображения из скрипта ant.
Документы по использованию SVG Salamander: http://svgsalamander.java.net/docs/use.html
Простая демонстрация с использованием SVG Salamander с Swing: http://svgsalamander.java.net/docs/exampleCode/SVGIODemo.html
Если вы видите неровные края, вы можете исправить это, добавив подсказку о рендеринге графики.
Также рекомендуется вызывать dispose(), когда вы закончите с графическим контекстом.
Graphics2D ig2 = bi.createGraphics();
ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
diagram.render(ig2);
ig2.dispose();
ImageIO.write(bi, "PNG", new File("./yourImageName.png"));