Java Batik操作SVG,实现svg读取,生成,动态操作

您所在的位置:网站首页 canvas导出矢量图 Java Batik操作SVG,实现svg读取,生成,动态操作

Java Batik操作SVG,实现svg读取,生成,动态操作

2023-09-01 08:34| 来源: 网络整理| 查看: 265

    SVG在现在的应用场景中还是很常见的,例如绘制复杂的矢量图形。说到SVG,就不得提下Canvas。在这里我就不详细列举它们之间的不同之处,以及为什么要选择SVG或Canvas了。

    首先,我的项目是一个Maven项目,所以只需要导入batik的maven依赖就可以了,如果是普通的Java项目,就需要自己找jar包导入项目中了。maven依赖有:

batik batik-svggen 1.6 batik batik-awt-util 1.6 batik batik-bridge 1.6 batik batik-css 1.6 batik batik-dom 1.6 batik batik-gvt 1.6 batik batik-parser 1.6 batik batik-script 1.6 batik batik-svg-dom 1.6 batik batik-transcoder 1.6 batik batik-util 1.6 batik batik-xml 1.6 xerces xercesImpl 2.5.0 xml-apis xmlParserAPIs 2.0.2 org.axsl.org.w3c.dom.svg svg-dom-java 1.1 xml-apis xml-apis 2.0.0 org.w3c.css sac 1.3

这个地方大致是需要这么多jar包依赖,我主要使用batik操作svg导出png或jpg,所以最主要的jar包是batik-transcoder,其实只要导入这一个jar包就够了,因为其他的jar包都会被依赖。这里有多或少了的或错误的,请指明。

    batik操作svg,首先要知道batik为我们做了什么事:

    batik是为想使用svg格式图片来实现各种功能的应用程序和Applet提供的一个基于java的工具包。     工程创建的目的是为开发者提供一系列可以结合或单独使用来支持特殊的svg解决方案的核心模块。模块主要有        SVGParser,SVGGernerator,SVGDOM。Batik工程的其他目的是使它具有高度的扩展性----举个例子,Batik允许开发者使用自定义的SVG元素。即使工程的目标是提供一系列核心模块,但是还是提供了一个完整的SVG浏览器,以便证实各个模块的有效性和交互性。

    上面这段话是batik官网给出对batik的一个简单的概述。我们通过这段话能够理解到,batik其实就是将对svg的操作分为了一个个核心模块,这主要包括SVGParser(解释器),SVGGernerator(生成器),SVGDOM(DOM元素)。通过字面的意思我们就能知道batik的主要核心模块为我们做了什么事。SVGParser解释器主要是对SVG的xml文件节点的解析,SVGGernerator(生成器)可以通过生成一个svg文件,SVGDOM能够建立SVGDOM节点,并在每一个Element上添加不同的属性。   

    通过Batik,你可以在任何使用到java的地方操作SVG文档。你也可以使用各种Batik模块来在你的应用程序和Applet中来生成,操作和转换你的svg图像。      batik使通过java处理SVG内容变的简单。举个例子,通过使用batik的SVGGernerate模块,java应用程序和Applet可以非常简单的使输出图像的格式为SVG。使用batik的SVG viewing component, 应用程序或者Applet可以非常容易的整合SVG查看和交互功能。另外还可以使用Batik的模块将SVG转换为其他格式,比如说JPEG等图像格式和PDF等其他向量格式。

    上面这段话也是官网batik对batik的一个用途的解释。首先我们选择一门语言,或是一种技术,必须要知道自己想要做什么,这门技术或工具能不能达到自己的需求,能不能解决现有的问题。选择好一种技术后,不是急着就拿着代码用,而是先要慢慢的去了解它,我承认,我也不是很了解batik,甚至说对它还不算了解。因为我也仅仅是停留在使用它的层次上。但是我们可以以点划线,再以线画面。

    先贴代码,然后进行解释:

public class SvgPngConverter {     /**      * batik通过读取svg文件的方式转png      * @param filePath 传入读取的svg文件      * @param pngFilePath 转换后的png图片      * @param map 更改svg属性的集合 传值规则,id,name,value 主要是更改svg子节点的颜色属性值。      *  如果需要改变svg的多个element的颜色属性 则命名规范为 id1,name1,value1,id2,name2,value2....依次类推      * @throws IOException      * @throws TranscoderException      */     public static void convertToPngByFile(String filePath, String pngFilePath,Map map) throws IOException, TranscoderException { File file = new File(pngFilePath); FileOutputStream outputStream = null; try { file.createNewFile(); outputStream = new FileOutputStream(file); convertToPngByFile(filePath, outputStream,map); } finally { if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }          public static void convertToPngByFile(String path, OutputStream outputStream,Map map)             throws TranscoderException, IOException {         try {          File file = new File(path);          String parser = XMLResourceDescriptor.getXMLParserClassName(); SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser); Document doc = f.createDocument(file.toURI().toString()); for (int i = 1; i 


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3