我有一个问题与通过代理从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
作为输出
有人可以帮忙吗?有问题的图片就是这个:
为了清楚起见,我想从上面提到的URL中抓取上面的图像(实际图像)并将其转换为base64字符串。
答案 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在系统上本地保存文件。