Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以使用SVG Salamander将SVG栅格化为PNG文件吗?_Svg_Png_Rasterize_Svg Salamander - Fatal编程技术网

我可以使用SVG Salamander将SVG栅格化为PNG文件吗?

我可以使用SVG Salamander将SVG栅格化为PNG文件吗?,svg,png,rasterize,svg-salamander,Svg,Png,Rasterize,Svg Salamander,我见过它,因为SVG蝾螈对我的项目来说足够小。但我不知道我是否能用它,也不知道怎么做 我使用了以下代码: 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 S

我见过它,因为SVG蝾螈对我的项目来说足够小。但我不知道我是否能用它,也不知道怎么做

我使用了以下代码:

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

}

但是图像并不平滑:(,有什么想法吗?

是的,要使用SVG蝾螈加载SVG文档:

  • 创建一个
    buffereImage
  • 从该
    buffereImage
    创建
    Graphics2D
    上下文
  • 调用
    SVGDiagram
    上的
    render()
  • 使用
    SVGIcon
    可以简化该过程,它处理蝾螈的内部结构,允许对象充当普通的摆动
    图标

    要在命令行上光栅化多个SVG文件,有一个Ant任务用于此类转换。有关详细信息,请参阅


    下面是一个示例光栅化器,给定SVG资源文件的路径,该光栅化器将加载矢量图形并将其渲染到
    buffereImage
    。无保修,无支持

    SvgRasterizer.java
    导入com.kitfox.svg.SVGDiagram;
    导入com.kitfox.svg.SVGException;
    导入com.kitfox.svg.SVGUniverse;
    导入java.awt.*;
    导入java.awt.image.buffereImage;
    导入java.net.URL;
    导入java.util.Map;
    导入静态java.awt.RenderingHints.*;
    导入静态java.awt.image.BufferedImage.TYPE_INT_ARGB;
    /**
    *负责将SVG图像转换为光栅化PNG图像。
    */
    公共级扩频器{
    公共最终静态地图渲染_HINTS=Map.of(
    键_抗锯齿,
    值_反别名_ON,
    键α插值,
    值\α\插值\质量,
    按键颜色渲染,
    值\颜色\渲染\质量,
    键抖动,
    值\u抖动\u禁用,
    基尤分馏计量学,
    价值计量,
    按键插值,
    值插值双三次,
    关键点,
    价值(渲染)(质量),,
    按键行程控制,
    值\u笔划\u纯,
    键\u文本\u抗锯齿,
    值\文本\反别名\开启
    );
    私有最终静态SVGUniverse srender=新SVGUniverse();
    /**
    *将给定路径指定的资源加载到的实例中
    *{@link SVGDiagram}可以光栅化为位图格式
    *{@link SVGUniverse}类将
    *
    *@param path相对于根的完整路径(从根开始)
    *应用程序或JAR文件的资源目录。
    *@return一个{@link SVGDiagram}可以被光栅化到
    *{@link BufferedImage}。
    */
    公共SVGDiagram加载图(最终字符串路径){
    最终var url=getResourceUrl(路径);
    最终var uri=srender.loadSVG(url);
    最终var图=srender.getDiagram(uri);
    返回应用程序设置(图表);
    }
    /**
    *一种可重复使用的方法,用于帮助计算
    *给定{@link SVGDiagram}映像和目标{@link Dimension}s。
    *
    *@param图具有宽度和高度的二维矢量图。
    *@param dstDim图像的目标尺寸。
    *@返回源图像维度(键)和
    *缩放图像尺寸(值)。
    */
    公共维度元组计算比例(
    最终SVG图表,最终尺寸(dstDim){
    最终变量srcDim=新的可缩放维度(
    (int)diagram.getWidth(),(int)diagram.getHeight()
    );
    最终var标度=srcDim.标度(dstDim);
    返回新的维度元组(srcDim,缩放);
    }
    /**
    *使用{@link BufferedImage}将矢量图形栅格化为给定大小。
    *渲染提示设置为生成高质量输出。
    *
    *@param diagram要栅格化的图表。
    *@param tuple源和目标映像维度。
    *@返回光栅化的{@link Image}。
    *@SVGException无法打开、读取、分析或呈现SVG数据。
    */
    公共缓冲区图像光栅化(
    最终SVGDiagram图,最终维度元组(元组)
    抛出SVGEException{
    最终变量scaled=tuple.getValue();
    最终变量wScaled=(int)scaled.getWidth();
    最终变量hScaled=(int)scaled.getHeight();
    最终var映像=新的缓冲区映像(wScaled、hScaled、TYPE_INT_ARGB);
    final var graphics=image.createGraphics();
    graphics.SetRenderingHits(渲染提示);
    final var transform=graphics.getTransform();
    setToScale(tuple.getWidthRatio(),tuple.getHeightRatio());
    graphics.setTransform(transform);
    图.渲染(图形);
    graphics.dispose();
    返回图像;
    }
    /**
    *使用{@link BufferedImage}将矢量图形栅格化为给定大小。
    *渲染提示设置为生成高质量输出。
    *
    *@param diagram要栅格化的图表。
    *@param dstDim输出图像尺寸。
    *@返回光栅化的{@link Image}。
    *@SVGException无法打开、读取、分析或呈现SVG数据。
    */
    公共图像光栅化(
    最终SVGDiagram图,最终尺寸(dstDim)引发SVGEException{
    返回光栅化(图表、计算比例(图表、dstDim));
    }
    /**
    *获取{@link URL}的实例,该实例引用
    *应用程序的资源。
    *
    *@param path相对于根的完整路径(从根开始)
    *应用程序或JAR文件的资源目录。
    *@将{@link URL}返回到文件,如果路径不正确,则返回{@code null}
    *指向一个资源。
    */
    私有URL getResourceUrl(最终字符串路径){
    返回SvgRasterizer.class.getResource(路径);
    }
    /**
    *指示SVG渲染器对图像进行光栅化,即使图像将
    *剪短了。
    *
    *@param diagram要呈现的{@link SVGDiagram}。
    *@返回同一实例,忽略片段启发式设置为{@code true}。
    */
    专用SVGDiagram应用程序设置(最终SVGDiagram图){
    图.setIgnoringClipHeuristic(真);
    返回图;
    }
    }
    
    您还需要
    ScalableDimensi
    
    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"));