Ignore:
Timestamp:
2011-12-26T21:48:25+01:00 (12 years ago)
Author:
simon04
Message:

see #7182 - Individual Icons for Imagery Background

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/tools/ImageProvider.java

    r4712 r4713  
    2121import java.io.IOException;
    2222import java.io.InputStream;
     23import java.io.StringReader;
     24import java.io.UnsupportedEncodingException;
    2325import java.net.MalformedURLException;
    2426import java.net.URI;
    2527import java.net.URL;
     28import java.net.URLDecoder;
    2629import java.util.Arrays;
    2730import java.util.Collection;
    2831import java.util.HashMap;
    2932import java.util.Map;
     33import java.util.regex.Matcher;
     34import java.util.regex.Pattern;
    3035import java.util.zip.ZipEntry;
    3136import java.util.zip.ZipFile;
    3237import javax.swing.Icon;
    3338import javax.swing.ImageIcon;
    34 
     39import org.apache.commons.codec.binary.Base64;
    3540import org.openstreetmap.josm.Main;
    3641import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    3742import org.openstreetmap.josm.io.MirroredInputStream;
    3843import org.openstreetmap.josm.plugins.PluginHandler;
    39 import org.openstreetmap.josm.tools.Utils;
    4044import org.xml.sax.Attributes;
    4145import org.xml.sax.EntityResolver;
     
    4549import org.xml.sax.helpers.DefaultHandler;
    4650import org.xml.sax.helpers.XMLReaderFactory;
    47 
    4851import com.kitfox.svg.SVGDiagram;
    4952import com.kitfox.svg.SVGException;
     
    167170    }
    168171
     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
    169179    static ImageResource getIfAvailableImpl(Collection<String> dirs, String id, String subdir, String name, File archive) {
    170180        if (name == null)
    171181            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
    172208        ImageType type = name.toLowerCase().endsWith(".svg") ? ImageType.SVG : ImageType.OTHER;
    173209
Note: See TracChangeset for help on using the changeset viewer.