通过代理从URL获取图像数据并转换为base64

时间:2017-09-11 13:48:43

标签: image url groovy proxy

我有一个问题与通过代理从URL抓取图像并将其转换为base64有关。

有一种简单的方法可以像下面的jsoup方法那样做吗?

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("myproxyurl", 8080))
Document doc = Jsoup.connect("mytargeturl").proxy(proxy).get()
Elements headline = doc?.getElementsByClass("myHTMLclass")

我希望在Groovy / Java(最好是Groovy)中执行此操作。

到目前为止,我到了这里:

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("myproxy", 8080))
URL url = new URL("https://maps.googleapis.com/maps/api/staticmap?size=600x400&markers=size:large%7Ccolor:yellow%7Clabel:A%7CNew%20York")
def image = url.openConnection(proxy).getContent()

println(image)

但我在控制台中将sun.awt.image.URLImageSource@26d9b808作为输出

有人可以帮忙吗?有问题的图片就是这个:

New York Static Goole Maps Image

为了清楚起见,我想从上面提到的URL中抓取上面的图像(实际图像)并将其转换为base64字符串。

2 个答案:

答案 0 :(得分:1)

只是做:

// By default this won't use a proxy, but if you pass one in, it will!
String toBase64(URL url, Proxy proxy = Proxy.NO_PROXY) {
   url.openConnection(proxy).inputStream.withCloseable {
       it.bytes.encodeBase64()
   }
}

URL url = new URL("https://maps.googleapis.com/maps/api/staticmap?size=600x400&markers=size:large%7Ccolor:yellow%7Clabel:A%7CNew%20York")

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("myproxyurl", 8080));

String encoded = toBase64(url, proxy)

答案 1 :(得分:0)

不确定代理设置,但是如果你想用java将图像转换为base64,那么就可以使用下面的代码了。

public class ChangeBase {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    String encodstring = encodeFileToBase64("http://imageurl");
    System.out.println(encodstring);

}

private static byte[] getByteFromImage(String urlStr) throws Exception {
    URL url = new URL(urlStr);
    BufferedImage image = ImageIO.read(url);
    // get DataBufferBytes from Raster
    WritableRaster raster = image.getRaster();
    DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
    return data.getData();
}

private static String encodeFileToBase64(String url) {
    String encodedString = null;
    try {
        byte[] bytes = getByteFromImage(url);
        encodedString = new String(Base64.getEncoder().encode(bytes), "UTF-8");

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return encodedString;
}
}

注意:我上面的代码用于存储在我的驱动器中的图像,你可以尝试使用url中的图像,建议一个是从url创建文件到文件并将其传递给 encodeFiletoBase64 方法,don& #39; t在系统上本地保存文件。