batik1.8解析base64嵌入图像时出现url不识别的错误

如下面的svg文件包含了嵌入的png,使用batik1.7可以正确打开,而升级成batik1.8后报url不识别的错误










解决方法

       查阅了batik的官网bug库,发现已经有高手解决此问题,在这里向高手致敬。下面说一下步骤,已经亲试有效。当然batik的源码肯定得修改所以首先确保你有batik1.8的src文件。

      1  修改 resources/META-INF/services/org.apache.batik.ext.awt.image.spi.RegistryEntry 如下(-号为需要删除的内容)(+号为需要添加的)

      

 # NOTE: the "codec" package is deprecated, there entries are kept here for compatibility with older JVM versions
 # (uses "sun.image", which is only supported in Sun Java implementations and was retired in JDK 7)
-#org.apache.batik.ext.awt.image.codec.png.PNGRegistryEntry
-#org.apache.batik.ext.awt.image.codec.tiff.TIFFRegistryEntry
+org.apache.batik.ext.awt.image.codec.png.PNGRegistryEntry
+org.apache.batik.ext.awt.image.codec.tiff.TIFFRegistryEntry
 
 org.apache.batik.ext.awt.image.codec.imageio.ImageIOJPEGRegistryEntry
 org.apache.batik.ext.awt.image.codec.imageio.ImageIOPNGRegistryEntry
2 修改 build.xml文件如下

<fileset dir="${dest}">
    <include name="${package-prefix}/ext/awt/image/codec/util/*.class"/>
    <include name="${package-prefix}/ext/awt/image/codec/png/*.class"/>
    - <include name="${package-prefix}/ext/awt/image/codec/imageio/*.class"
    - unless="sun-codecs.present"/>
    + <include name="${package-prefix}/ext/awt/image/codec/imageio/*.class"/>
    <include name="${package-prefix}/ext/awt/image/codec/tiff/*.class"
    if="sun-codecs.present"/>
    <include name="${package-prefix}/ext/awt/image/codec/jpeg/*.class"
3 修改 sources/org/apache/batik/ext/awt/image/spi/ImageTagRegistry.java

  

if (re.getPriority() > priority) {
    li.previous();
    li.add(newRE);
    + extensions = null;
    + mimeTypes = null;
    return;
    }

 改完这几个就去编译好啦,编译完成后的jar引入到程序就会发现嵌入的图片完美显示了


你可能感兴趣的:(svg)