Changeset 4713 in josm for trunk/src/org/openstreetmap/josm/tools
- Timestamp:
- 2011-12-26T21:48:25+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
r4712 r4713 21 21 import java.io.IOException; 22 22 import java.io.InputStream; 23 import java.io.StringReader; 24 import java.io.UnsupportedEncodingException; 23 25 import java.net.MalformedURLException; 24 26 import java.net.URI; 25 27 import java.net.URL; 28 import java.net.URLDecoder; 26 29 import java.util.Arrays; 27 30 import java.util.Collection; 28 31 import java.util.HashMap; 29 32 import java.util.Map; 33 import java.util.regex.Matcher; 34 import java.util.regex.Pattern; 30 35 import java.util.zip.ZipEntry; 31 36 import java.util.zip.ZipFile; 32 37 import javax.swing.Icon; 33 38 import javax.swing.ImageIcon; 34 39 import org.apache.commons.codec.binary.Base64; 35 40 import org.openstreetmap.josm.Main; 36 41 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 37 42 import org.openstreetmap.josm.io.MirroredInputStream; 38 43 import org.openstreetmap.josm.plugins.PluginHandler; 39 import org.openstreetmap.josm.tools.Utils;40 44 import org.xml.sax.Attributes; 41 45 import org.xml.sax.EntityResolver; … … 45 49 import org.xml.sax.helpers.DefaultHandler; 46 50 import org.xml.sax.helpers.XMLReaderFactory; 47 48 51 import com.kitfox.svg.SVGDiagram; 49 52 import com.kitfox.svg.SVGException; … … 167 170 } 168 171 172 /** 173 * {@code data:[<mediatype>][;base64],<data>} 174 * @see RFC2397 175 */ 176 private static final Pattern dataUrlPattern = Pattern.compile( 177 "^data:([a-zA-Z]+/[a-zA-Z+]+)?(;base64)?,(.+)$"); 178 169 179 static ImageResource getIfAvailableImpl(Collection<String> dirs, String id, String subdir, String name, File archive) { 170 180 if (name == null) 171 181 return null; 182 183 try { 184 if (name.startsWith("data:")) { 185 Matcher m = dataUrlPattern.matcher(name); 186 if (m.matches()) { 187 String mediatype = m.group(1); 188 String base64 = m.group(2); 189 String data = m.group(3); 190 byte[] bytes = ";base64".equals(base64) 191 ? Base64.decodeBase64(data) 192 : URLDecoder.decode(data, "utf-8").getBytes(); 193 if (mediatype != null && mediatype.contains("image/svg+xml")) { 194 URI uri = getSvgUniverse().loadSVG(new StringReader(new String(bytes)), name); 195 SVGDiagram svg = getSvgUniverse().getDiagram(uri); 196 return new ImageResource(svg); 197 } else { 198 return new ImageResource(new ImageIcon(bytes).getImage(), true); 199 } 200 } 201 } 202 } catch (UnsupportedEncodingException ex) { 203 throw new RuntimeException(ex.getMessage(), ex); 204 } catch (IOException ex) { 205 throw new RuntimeException(ex.getMessage(), ex); 206 } 207 172 208 ImageType type = name.toLowerCase().endsWith(".svg") ? ImageType.SVG : ImageType.OTHER; 173 209
Note:
See TracChangeset
for help on using the changeset viewer.