2017-09-11 19 views
0

URLからプロキシ経由で画像を取得してbase64に変換することに関連する質問があります。プロキシ経由で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) 

しかし、私は

誰が助けることができ、コンソールに出力として[email protected]を取得していますか?問題の画像はこの1つである:

New York Static Goole Maps Image

だけ明確にするために、私は上記URLから上記画像(実際の画像)を取得し、base64文字列に変換します。

答えて

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) 
+0

これを1つのライナーにして、それが動作しているようです: 'def encodedImage = mapUrl.openConnection(myProxy).inputStream.withCloseable {it.bytes.encodeBase64()}' –

+0

もう一度それが必要になるまで楽しみます;-) –

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から画像を試すことができます同じものを使用し、1のURLからファイルとencodeFiletoBase64方法、ドン」に同じを渡すためにバイトを作成している提案システム上にファイルをローカルに保存しないでください。

+0

はgetByteの編集コードに従って、URLから直接のBase64に変換します。 – Simmant

+0

@Simmantに感謝しますが、この事のために1つのライナーがありますか?私は複数の行に似た何かを持っています。私は物事をこの低レベルのものよりもずっと簡単にしようとしています。 –

関連する問題