From 6f53360e477d3b9b72f09e2b862ca1baedf29520 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 18 Dec 2013 21:19:37 -0500 Subject: [PATCH] Add data-uri scheme (embedded images) to image support --- Source/Basic Shapes/SvgImage.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Source/Basic Shapes/SvgImage.cs b/Source/Basic Shapes/SvgImage.cs index 7604aeb64..06259fe5d 100644 --- a/Source/Basic Shapes/SvgImage.cs +++ b/Source/Basic Shapes/SvgImage.cs @@ -125,14 +125,29 @@ protected Image GetImage(Uri uri) { try { + // handle data/uri embedded images (http://en.wikipedia.org/wiki/Data_URI_scheme) + if (uri.Scheme == "data") + { + string uriString = uri.OriginalString; + int dataIdx = uriString.IndexOf(",") + 1; + if (dataIdx <= 0 || dataIdx + 1 > uriString.Length) + throw new Exception("Invalid data URI"); + + // we're assuming base64, as ascii encoding would be *highly* unsusual for images + // also assuming it's png or jpeg mimetype + byte[] imageBytes = Convert.FromBase64String(uriString.Substring(dataIdx)); + Image image = Image.FromStream(new MemoryStream(imageBytes)); + return image; + } + // should work with http: and file: protocol urls var httpRequest = WebRequest.Create(uri); using (WebResponse webResponse = httpRequest.GetResponse()) { MemoryStream ms = BufferToMemoryStream(webResponse.GetResponseStream()); - Image b = Bitmap.FromStream(ms); - return b; + Image image = Bitmap.FromStream(ms); + return image; } } catch (Exception ex)