1

我正在尝试获取一系列图像的网址:

for(Element img : document.select(".left-column .strillo-content .lazy img[src]")) {
    InputStream input = new java.net.URL(imageMainUrl).openStream();
    Bitmap bitmap = BitmapFactory.decodeStream(input);
    images.add(bitmap);
}

但每次我尝试运行我的应用程序时,我都会收到以下警告:

java.net.MalformedURLException: Unknown protocol: data
at java.net.URL.<init>(URL.java:184)
at java.net.URL.<init>(URL.java:127)

所以我试图打印 URL,我得到了这个:

data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7

我可以弄清楚为什么,因为我 100% 确定我选择的元素是正确的,而且我对网站的其他部分执行相同的过程并且它有效..

更新 1:我尝试过这种方法来解码“base64”图像:

byte[] decodedString = Base64.decode(imageMainUrl, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

但结果是一样的..

4

1 回答 1

1

这是数据 URI 方案

http://en.wikipedia.org/wiki/Data_URI_scheme

它允许在您的 URI 中添加内联数据。

编辑

这段代码有效,它给出了一个 1px*1px 的 gif 图像。org.apache.commons.codec.binary.Base64我用过commons-codec

String uri = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
byte[] decodedString = Base64.decodeBase64(uri.substring(uri.indexOf("data:image/gif;base64,") + "data:image/gif;base64,".length()));
ByteArrayInputStream is = new ByteArrayInputStream(decodedString);
FileOutputStream os = new FileOutputStream(new File("/tmp/test.gif"));

byte[] buffer = new byte[1024];
int length;

// copy the file content in bytes 
while ((length = is.read(buffer)) > 0)
{
    os.write(buffer, 0, length);
}

is.close();
os.close();
于 2014-11-04T22:34:26.737 回答