Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Embedding image into HTML in java?

I have this code where I am trying to read an image from Url:

   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;}

But what I am getting is unreadable code. The url gives only one image try this:

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

What should I do to embed the image into Html?

like image 866
Navdroid Avatar asked Dec 02 '22 00:12

Navdroid


2 Answers

First of all it is not clear what you mean by image in Html format ? You could Base64 encode its binary data, but is that what you really want?

How do you expect to output a PNG picture returned by your URL to a text console (that is System.out)?

Second, the way you're retrieving the image is not functional even if you were to store it on a disk as a PNG file, because Reader and its derivatives like BufferedReader are used to read character data. From Reader API:

Abstract class for reading character streams

You need to read binary (byte) data, so you need to stick with BufferedInputStream


After some thinking I realized that embedding image into HTML is what you really want:

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) + "'>");
}

The result is:

<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=='>

Isn't that great? Anything for you!

like image 108
Oleg Mikheev Avatar answered Dec 04 '22 12:12

Oleg Mikheev


Well, I don't know if that is what you want because it seems that nobody does. But if you want to get this output

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

you will have to use this code

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 + "\"/>";
}

Also you might have to escape some characters like \ in the tex parameter.

like image 28
user219882 Avatar answered Dec 04 '22 13:12

user219882