该存储库包含示例代码。如果要使用最新版本,则涉及一些步骤:
安装Apache Maven。
将存储库克隆到某个位置:
mkdir -p $HOME/dev/java/
cd $HOME/dev/java
git clone https://github.com/blackears/svgSalamander更新
pom.xml
:cd svgSalamander/svg-core
vi pom.xml
更改
source
,target
和JDK版本号:<maven.compiler.source>1.7</maven.compiler.source>
1.7 1.7 保存
pom.xml
。使用Maven生成JAR文件:
mvn package
复制
target/svgSalamander-1.1.2.jar
(确保必须更改版本号)到程序的库目录(例如libs
)。
如果您的程序使用Gradle进行构建,请更新依赖项以使用本地JAR文件:
dependencies { // SVG implementation fileTree(include: ['**public class SvgRasterizer { public final static Map<Object, Object> RENDERING_HINTS = Map.of( KEY_ANTIALIASING, VALUE_ANTIALIAS_ON, KEY_ALPHA_INTERPOLATION, VALUE_ALPHA_INTERPOLATION_QUALITY, KEY_COLOR_RENDERING, VALUE_COLOR_RENDER_QUALITY, KEY_DITHERING, VALUE_DITHER_DISABLE, KEY_FRACTIONALMETRICS, VALUE_FRACTIONALMETRICS_ON, KEY_INTERPOLATION, VALUE_INTERPOLATION_BICUBIC, KEY_RENDERING, VALUE_RENDER_QUALITY, KEY_STROKE_CONTROL, VALUE_STROKE_PURE, KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_ON ); private final static SVGUniverse sRenderer = new SVGUniverse(); public Image rasterize( final String path, final Dimension dstDim ) throws SVGException { final var diagram = loadDiagram( path ); final var wDiagram = diagram.getWidth(); final var hDiagram = diagram.getHeight(); final var srcDim = new Dimension( (int) wDiagram, (int) hDiagram ); final var scaled = fit( srcDim, dstDim ); final var wScaled = (int) scaled.getWidth(); final var hScaled = (int) scaled.getHeight(); final var image = new BufferedImage( wScaled, hScaled, TYPE_INT_ARGB ); final var g = image.createGraphics(); g.setRenderingHints( RENDERING_HINTS ); final var transform = g.getTransform(); transform.setToScale( wScaled / wDiagram, hScaled / hDiagram ); g.setTransform( transform ); diagram.render( g ); g.dispose(); return image; } private URL getResourceUrl( final String path ) { return SvgRasterizer.class.getResource( path ); } private SVGDiagram loadDiagram( final String path ) { final var url = getResourceUrl( path ); final var uri = sRenderer.loadSVG( url ); final var diagram = sRenderer.getDiagram( uri ); return applySettings( diagram ); } private SVGDiagram applySettings( final SVGDiagram diagram ) { diagram.setIgnoringClipHeuristic( true ); return diagram; } private Dimension fit( final Dimension src, final Dimension dst ) { final var srcWidth = src.getWidth(); final var srcHeight = src.getHeight(); // Determine the ratio that will have the best fit. final var ratio = Math.min( dst.getWidth() / srcWidth, dst.getHeight() / srcHeight ); // Scale both dimensions with respect to the best fit ratio. return new Dimension( (int) (srcWidth * ratio), (int) (srcHeight * ratio) ); }}使用
SvgRasterizer如下:
final var rasterizer = new SvgRasterizer();final var image = rasterizer.rasterize( "/images/icon.svg", new Dimension( 200, 200 ) );
该图像可以轻松添加到Swing组件中。例如,以下
JComponent是可以与其他任何人一样对待的:
import javax.swing.*;import java.awt.*;public class ImageComponent extends JComponent { private Image mImage; ImageComponent( final Image image ) { mImage = image; } @Override public Dimension getPreferredSize() { // Race-condition guard. final var image = mImage; return new Dimension( image.getWidth( null ), image.getHeight( null ) ); } @Override protected void paintComponent( final Graphics graphics ) { super.paintComponent( graphics ); final var g = (Graphics2D) graphics.create(); g.drawImage( mImage, 0, 0, this ); } public void redraw( final Image image ) { mImage = image; repaint(); }}


