Могу ли я использовать 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"));
Другие вопросы по тегам