Sorry for all the mailing list questions. I'm quite new to SVG and Batik and
feel a bit overwhelmed with all the pieces.
I'm trying to figure out the best way to transform SVG Images using the Batik
Library. Our application would like to use SVG images and resize, scale, and
rotate images. One current method I am trying is creating a new VG document and
attaching the SVG I want to modify to it and then transforming the new SVG
File. I'm not sure if this is the easiest or most correct way.
DOMImplementation newSvgTest =
SVGDOMImplementation.getDOMImplementation();
String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
Document newDoc = newSvgTest.createDocument(svgNS, "svg", null);
Element root = newDoc.getDocumentElement();
root.setAttributeNS(null, "viewBox", "0 0 100 100");
Element svgTarget = newDoc.createElementNS(svgNS, "image");
svgTarget.setAttributeNS(null, "x", "0");
svgTarget.setAttributeNS(null, "y", "0");
svgTarget.setAttributeNS(null, "width", width.toString());
svgTarget.setAttributeNS(null, "height", height.toString());
svgTarget.setAttributeNS(null, "transform",
String.format("rotate(45, %f/2, %f/2)", width, height));
svgTarget.setAttributeNS("http://www.w3.org/1999/xlink",
"xlink:href", this.getOwner().getSHIP().getImageResourceDir()+ File.separator +
image.getFilename()); //SVG File
root.appendChild(svgTarget);
But when I try to transcode this document all I get is the error:
java.lang.IllegalStateException: Unknown protocol: c
at
org.apache.felix.framework.URLHandlersStreamHandlerProxy.toExternalForm(URLHandlersStreamHandlerProxy.java:481)
at
org.apache.felix.framework.URLHandlersStreamHandlerProxy.toExternalForm(URLHandlersStreamHandlerProxy.java:474)
at java.net.URL.toExternalForm(URL.java:921)
at java.net.URL.toString(URL.java:907)
at
org.apache.felix.framework.URLHandlersStreamHandlerProxy.openConnection(URLHandlersStreamHandlerProxy.java:267)
at java.net.URL.openConnection(URL.java:971)
at
org.apache.batik.util.ParsedURLData.openStreamInternal(ParsedURLData.java:517)
at
org.apache.batik.util.ParsedURLData.openStream(ParsedURLData.java:471)
at
org.apache.batik.util.ParsedURL.openStream(ParsedURL.java:429)
at
org.apache.batik.bridge.SVGImageElementBridge.openStream(SVGImageElementBridge.java:377)
at
org.apache.batik.bridge.SVGImageElementBridge.createImageGraphicsNode(SVGImageElementBridge.java:242)
at
org.apache.batik.bridge.SVGImageElementBridge.buildImageGraphicsNode(SVGImageElementBridge.java:177)
at
org.apache.batik.bridge.SVGImageElementBridge.createGraphicsNode(SVGImageElementBridge.java:119)
at
org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:213)
at
org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:82)
at
org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:208)
at
org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.java:92)
at
org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142)
at
org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156)
at
com.seriousintegrated.ship.propertysets.ImagePropertySet.setScaledVectorImage(ImagePropertySet.java:233)
at
com.seriousintegrated.ship.propertysets.ImagePropertySet.mashImage(ImagePropertySet.java:153)
at
com.seriousintegrated.ship.propertysets.ImagePropertySet.mash(ImagePropertySet.java:401)
at
com.seriousintegrated.ship.objects.SHIPObject.mashProperties(SHIPObject.java:960)
at
com.seriousintegrated.ship.objects.SHIPObject.mash(SHIPObject.java:989)
at
com.seriousintegrated.ship.objects.SHIPObject.mash(SHIPObject.java:1005)
at
com.seriousintegrated.ship.objects.DryLandObject.mash(DryLandObject.java:101)
[catch] at com.seriousintegrated.ship.base.SHIP.mash(SHIP.java:414)
at
com.seriousintegrated.ship.tide.settings.project.MashWorker.doInBackground(MashWorker.java:46)
at
com.seriousintegrated.ship.tide.settings.project.MashWorker.doInBackground(MashWorker.java:25)
at javax.swing.SwingWorker$1.call(SwingWorker.java:296)
at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at javax.swing.SwingWorker.run(SwingWorker.java:335)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Thanks,
Mark