diff --git a/epublib/src/main/java/me/ag2s/epublib/domain/Resources.java b/epublib/src/main/java/me/ag2s/epublib/domain/Resources.java index 27d512700..1a57c6a9c 100644 --- a/epublib/src/main/java/me/ag2s/epublib/domain/Resources.java +++ b/epublib/src/main/java/me/ag2s/epublib/domain/Resources.java @@ -10,6 +10,9 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import android.util.Base64; /** * All the resources that make up the book. @@ -314,7 +317,17 @@ public class Resources implements Serializable { return null; } href = StringUtil.substringBefore(href, Constants.FRAGMENT_SEPARATOR_CHAR); - return resources.get(href); + + Pattern dataUriRegex = Pattern.compile("data:([\\w/\\-\\.]+);base64,(.*)"); + Matcher dataUriMatcher = dataUriRegex.matcher(href); + if (dataUriMatcher.find()) { + String dataUriMediaTypeString = dataUriMatcher.group(1); + MediaType dataUriMediaType = new MediaType(dataUriMediaTypeString, "." + StringUtil.substringAfterLast(dataUriMediaTypeString, '/')); + byte[] dataUriData = Base64.decode(dataUriMatcher.group(2), Base64.DEFAULT); + return new Resource(dataUriData, dataUriMediaType); + } else { + return resources.get(href); + } } /**