2014-11-04 5 views
0

Я пытаюсь получить URL из ряда изображений, как, что:не может получить URL из образа с jsoup

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% уверен, что элемент I Сель тоят corrent, а также я делаю то же самое с другим разделом сайта, и он работает ..

UPDATE 1: Я попробовал этот метод, чтобы декодировать'base64' изображение:

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

, но результат тот же ..

+1

Я не эксперт по HTML, но кажется, что содержание изображения фактически встроен в Src тег, вместо того, чтобы указывать на URL. Возможно, вы сможете декодировать это на android, если вы храните его в массиве байтов и передаете его в BitmapFactory.decodeByteArray, http://developer.android.com/reference/android/graphics/BitmapFactory.html –

ответ

0

это данные 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(); 
+0

Вы должны удалить из imageMainUrl префикс 'data: image/gif; base64,' – ToYonos

+0

Выполнено, но тот же результат – DamianFox

+0

Что вы подразумеваете под тем же результатом? – ToYonos

Смежные вопросы