I'm investigating switching from Batik 1.7 to a nightly 1.8 build
because 1.7 fails catastrophically when used with Java 7 to load SVG
containing <image> elements which reference JPEGs. (This is apparently
due to Batik 1.7 using com.sun.image.codec.jpeg.TruncatedFileException,
which no longer exists in Java 7, so one ends up with a
NoClassDefFoundError.) This is a growing problem for us because our
users are starting to use Java 7 now.

I have some SVG files which reside in a JAR and are rendered to
BufferedImages using a custom subclass of SVGAbstractTranscoder which
I wrote (it's nearly the same as ImageTranscoder, except it doesn't
write the image to a file). When I use the Batik 1.7 JARs, all SVG---
both SVG containing <image> elements and SVG without <image> elements---
renders correctly. When I use the Batik JARs built with the the 12-09-25
1.8pre source, SVG without <image> elements renders correctly, but
rendering the SVG with <image> elements fails with an exception. (I've
trimmed the bottom of the stack trace, as that's my code which is
calling custom transcoder, so not relevant, as well as a ton of base64
in the URI.)

org.apache.batik.bridge.BridgeException: 
jar:file:/home/uckelman/projects/VASSAL/mods/Here_I_Stand_2.3.vmod!/images/Ottoman_hand.svg:0
The URI "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAA0CAYA
...
m/8Dgk9CDmp9DwIAAAAASUVORK5CYII= "
on element <image> can't be opened because:
URL data in unsupported format or corrupt
  at org.apache.batik.bridge.UserAgentAdapter.getBrokenLinkDocument(Unknown 
Source)
  at 
org.apache.batik.bridge.SVGImageElementBridge.createRasterImageNode(Unknown 
Source)
  at 
org.apache.batik.bridge.SVGImageElementBridge.createImageGraphicsNode(Unknown 
Source)
  at 
org.apache.batik.bridge.SVGImageElementBridge.buildImageGraphicsNode(Unknown 
Source)
  at org.apache.batik.bridge.SVGImageElementBridge.createGraphicsNode(Unknown 
Source)
  at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(Unknown Source)
  at org.apache.batik.bridge.GVTBuilder.buildComposite(Unknown Source)
  at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(Unknown Source)
  at org.apache.batik.bridge.GVTBuilder.buildComposite(Unknown Source)
  at org.apache.batik.bridge.GVTBuilder.build(Unknown Source)
  at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(Unknown Source)
  at 
VASSAL.tools.image.svg.SVGRenderer$Rasterizer.transcode(SVGRenderer.java:224)
  at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(Unknown Source)
  at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(Unknown Source)
  at VASSAL.tools.image.svg.SVGRenderer.render(SVGRenderer.java:133)


I extracted the same SVG file above from the JAR and tried opening it
using Squiggle from 1.8pre, and found that Squiggle was able to render
it. I also tried the URI

  
jar:file:/home/uckelman/projects/VASSAL/mods/Here_I_Stand_2.3.vmod!/images/Ottoman_hand.svg

with "Open Location", and Squiggle was able to render that, too. This
makes it clear that the SVG file is fine and that 1.8pre can render it.

Can anyone tell me what changed between 1.7 and 1.8pre that could be
causing the failure I'm seeing?

The code for my renderer is here:

http://vassalengine.svn.sourceforge.net/viewvc/vassalengine/VASSAL-src/trunk/src/VASSAL/tools/image/svg/SVGRenderer.java?view=markup&pathrev=8398

-- 
J.

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-h...@xmlgraphics.apache.org

Reply via email to