From 2d39fa7f95efb645d2ae704524d91db7899274ef Mon Sep 17 00:00:00 2001 From: kitfox Date: Sat, 7 Aug 2010 09:59:11 +0000 Subject: Added support for inline images. git-svn-id: https://svn.java.net/svn/svgsalamander~svn/trunk/svg-core@79 7dc7fa77-23fb-e6ad-8e2e-c86bd48ed22b --- src/main/java/com/kitfox/svg/SVGUniverse.java | 57 ++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) (limited to 'src/main/java/com/kitfox/svg/SVGUniverse.java') diff --git a/src/main/java/com/kitfox/svg/SVGUniverse.java b/src/main/java/com/kitfox/svg/SVGUniverse.java index 8fdf19d..f99279b 100644 --- a/src/main/java/com/kitfox/svg/SVGUniverse.java +++ b/src/main/java/com/kitfox/svg/SVGUniverse.java @@ -35,6 +35,7 @@ import java.beans.PropertyChangeSupport; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; @@ -51,7 +52,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.zip.GZIPInputStream; import javax.imageio.ImageIO; -import javax.xml.parsers.SAXParserFactory; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -173,7 +173,60 @@ public class SVGUniverse implements Serializable { return (Font)loadedFonts.get(fontName); } - + + URL registerImage(URI imageURI) + { + String scheme = imageURI.getScheme(); + if (scheme.equals("data")) + { + String path = imageURI.getRawSchemeSpecificPart(); + int idx = path.indexOf(';'); + String mime = path.substring(0, idx); + String content = path.substring(idx + 1); + + if (content.startsWith("base64")) + { + content = content.substring(6); + try { + byte[] buf = new sun.misc.BASE64Decoder().decodeBuffer(content); + ByteArrayInputStream bais = new ByteArrayInputStream(buf); + BufferedImage img = ImageIO.read(bais); + + URL url; + int urlIdx = 0; + while (true) + { + url = new URL("inlineImage", "localhost", "img" + urlIdx); + if (!loadedImages.containsKey(url)) + { + break; + } + urlIdx++; + } + + SoftReference ref = new SoftReference(img); + loadedImages.put(url, ref); + + return url; + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return null; + } + else + { + try { + URL url = imageURI.toURL(); + registerImage(url); + return url; + } catch (MalformedURLException ex) { + ex.printStackTrace(); + } + return null; + } + } + void registerImage(URL imageURL) { if (loadedImages.containsKey(imageURL)) return; -- cgit v1.2.3-55-g7522