2012-02-21 1 views
3

У меня есть этот код, в котором я пытаюсь прочитать изображение из URL:Вставка изображения в HTML в java?

public class question_insert { 
public static String latex(String tex) throws IOException { 

    String urltext = "http://chart.apis.google.com/chart?cht=tx&chl="+tex; 

    URL url = new URL(urltext); 
    BufferedReader in = new BufferedReader(new InputStreamReader(url 
      .openStream())); 
    String inputLine; 

    while ((inputLine = in.readLine()) != null) { 
     // Process each line. 
     System.out.println(inputLine.toString()); 

    } 
    in.close(); 

    return inputLine;} 

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

http://chart.apis.google.com/chart?cht=tx&chl=2+2%20\frac{3}{4}

Что я должен сделать, чтобы вставить изображение в HTML?

+0

Что вы подразумеваете под нечитаемым кодом и изображением в формате HTML? Данные, которые вы получаете со страницы, являются PNG-файлом, поэтому сохраните его. – user219882

+0

Я хочу сохранить с URL в строке. – Navdroid

+0

Что вы ожидаете от своего результата? –

ответ

5

Ну, я не знаю, если это то, что вы хотите, потому что кажется, что никто не делает. Но если вы хотите, чтобы этот выход

<img style="-webkit-user-select: none" 
src="http://chart.apis.google.com/chart?cht=tx&chl=2+2%20\frac{3}{4}" /> 

вам придется использовать этот код

public static String latex(String tex) { 
    String url = "http://chart.apis.google.com/chart?cht=tx&chl=" + tex; 
    return "<img style=\"-webkit-user-select: none\" src=\"" + url + "\"/>"; 
} 

Кроме того, вы, возможно, придется избежать некоторых символов, как \ в параметре tex.

7

Прежде всего неясно, что вы подразумеваете под изображений в формате HTML? Вы могли бы Base64 кодировать свои двоичные данные, но это то, что вы действительно хотите?

Как вы ожидаете получить изображение PNG, возвращаемое вашим URL-адресом, в текстовую консоль (то есть System.out)?

Во-вторых, способ, которым вы извлекаете изображение, не работает, даже если вы должны хранить его на диске в виде файла PNG, потому что Reader и его производные, такие как BufferedReader, используются для чтения символьных данных. Из Reader API:

Абстрактный класс для чтения символьные потоки

Вы должны прочитать двоичные данные (байт), так что вы должны придерживаться BufferedInputStream


После некоторого мышления я понял, что вложение изображения в HTML - это то, что вы действительно хотите:

public static void main(String[] args) throws Exception { 
    String urltext = "http://chart.apis.google.com/chart?cht=tx&chl=2+2%20\\frac{3}{4}"; 
    URL url = new URL(urltext); 
    BufferedInputStream bis = new BufferedInputStream(url.openStream()); 
    byte[] imageBytes = new byte[0]; 
    for(byte[] ba = new byte[bis.available()]; 
     bis.read(ba) != -1;) { 
     byte[] baTmp = new byte[imageBytes.length + ba.length]; 
     System.arraycopy(imageBytes, 0, baTmp, 0, imageBytes.length); 
     System.arraycopy(ba, 0, baTmp, imageBytes.length, ba.length); 
     imageBytes = baTmp; 
    } 
    System.out.println("<img src='data:image/png;base64," + DatatypeConverter.printBase64Binary(imageBytes) + "'>"); 
} 

Результат:

<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAhCAIAAACnV0fJAAAABmJLR0QA/wD/AP+gvaeTAAAC/klEQVRIiaWWv0vzQBjHr2ltsGDEyf+giAg5iIO4iiJC8cciQhaLk9IOGpcOii5ugj/qZoeWgqtFXJxrBSnUQTAianTJEJBcjeRCwr3D+caY1ijpd7rnc8lzz/PkuYdECCEgrDDGlmXF43GWZV0YC+0un8/f3993dXU9PT0JgpDL5T43SChdXV0JgnB5eUkIqVarPM+XSiW6xYQLkGEYlmVfXl4AAENDQwCAer3eUYyEENM06aJSqUAIq9UqNcN7JIQYhlGr1RYWFg4ODlwYMmuqer3++vra3d0ty7JlWZ1m7UrX9eHh4XQ67Y8RY9xsNh3H8QXSll9fX5fLZbrmOK6vr+/m5sYwDOD24+HhoaqqmqYpijI1NZXJZIL5xsaGqqqpVIrjOJpoJBL5ynpvb+/8/JzGTD/c/v5+ACeEZLPZ7e1tur67u+N5PpfLUTNimmYqlZqZmVleXqZnTExM2LZdqVTm5uZa+cXFRTQatSxra2vLMAyGYWRZhhBubm7G43EAANB1HUIIIdR1nR6STqd5nn9+fm7LXZMQYpomQshtTKoYx3Hr6+u0wDQWTdMSiUR/f39b7h0KLMt6zfbd8/j4KAhCNpv9I29VhHyfZouLi6qqnp6efhalHW82m/64/iuRSHybZsViESF0dHTkc+flCKGxsbGfPEqS9JX12dnZ0tISxtiXRStHP8u2beCWKZPJuK/t7Oy8v78H8AABQoiiKJIkaZpGz3l7exNFMYD/8mVs2xZFUZZlbzmSyWS5XG7LT05OWsuHMXbbKAYAmJ2d9T2RTCYDuE/FYrHRaOzu7n7av2YRLEVRRkdHvX3a0cQFABQKBd+16chjPp8fGRmJxb41dXiPDw8PCKHJyUkfD+nRcZzj4+O1tbXWrZAeS6XS9PS077JS+SfFX2QYxvz8/MDAADVrtVpvb+/g4KAoihDCkN3jvcvj4+MrKyv0UhNCQv5J9fT0eM1oNOqSjrqn0Wisrq7qun57eytJEsYYhKujK8dxPj4+XJOG+Q+Ygl+7nqaLKQAAAABJRU5ErkJggg=='> 

Разве это не здорово? Что-нибудь для вас!

+0

Я новичок, я просто пытаюсь прочитать это с URL-адресом Я не показываю изображение здесь. – Navdroid

+0

Что ты еще пытаешься сделать? Предпочтительно с точки зрения человека –

+0

@Navdroid Но что вы ожидаете прочитать? Текст? Вы получаете двоичные данные изображения. Неудивительно, что это невозможно прочитать. – user219882

2

Чтобы получить изображение, вы должны попробовать использовать ImageIO API как этот

try { 
    URL url = new URL(urltext); 
    BufferedImage img = ImageIO.read(url); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

Уверенный, что это был хороший ответ, но как вы можете отобразить это изображение с помощью html? Я имел в виду в формате Navdroid

+0

@Navdroid, можете ли вы рассказать нам с человеческими терминами, каков результат, которого вы пытаетесь достичь? Что такое формат ? –

0

http://chart.apis.google.com/chart?cht=tx&chl=2+2%20 \ гидроразрыва {3} {4}

Обратите внимание, что этот URL неправильно. Это показывает 22 3/4 вместо предполагаемого 2 + 2 3/4. Параметр запроса, содержащий специальные символы, должен быть закодирован в URL следующим образом.

http://chart.apis.google.com/chart?cht=tx&chl=2%2B2%20%5Cfrac%7B3%7D%7B4%7D

Вы можете добиться этого с URLEncoder#encode().

String chl = "2+2 \\frac{3}{4}"; 
String url = "http://chart.apis.google.com/chart?cht=tx&chl=" + URLEncoder.encode(chl, "UTF-8"); 

Назад к вашему функциональное требование:

Что я должен сделать, чтобы вставить изображение в HTML?

Если единственным функциональным требованием является, чтобы отобразить изображение в наличии за указанный URL с помощью HTML <img> элемента на странице HTML/JSP, то вам нужно использовать JSTL<c:url> тег параметров запроса URL-кодирование, содержащих специальные символы.

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
... 
<c:url var="url" value="http://chart.apis.google.com/chart"> 
    <c:param name="cht" value="tx" /> 
    <c:param name="chl" value="2+2 \\frac{3}{4}" /> 
</c:url> 

Тогда вы можете просто передать его в качестве ${url} (как заявлено в var атрибут <c:url>) в атрибуте HTML <img> элемента src:

<img src="${url}" /> 

Чтение двоичного потока изображения из URL, как поток символов и сохранение в строке, как вы первоначально пытались, совершенно не имеют полного смысла. Например, вы также не открывали файлы изображений в блокноте.

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

  • Нет связанных вопросов^_^