java圖片轉(zhuǎn)base64和真實的結(jié)果不一樣
問題描述
先上代碼
String imgURL = 'http://www.g3zj.net:8082/util.action?method=appauthimg&d_=99';byte[] data = null;try { // 創(chuàng)建URL URL url = new URL(imgURL); // 創(chuàng)建鏈接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod('GET'); conn.setConnectTimeout(5 * 1000); InputStream inStream = conn.getInputStream(); data = new byte[inStream.available()]; inStream.read(data); inStream.close();} catch (IOException e) { e.printStackTrace();}// 對字節(jié)數(shù)組Base64編碼BASE64Encoder encoder = new BASE64Encoder();str=encoder.encode(data);
就是從一個網(wǎng)絡(luò)讀取圖片并轉(zhuǎn)成base64.發(fā)現(xiàn)轉(zhuǎn)出來的結(jié)果無法用于img標簽顯示(已加了data:image/jpeg;base64,前綴)。后來直接百度找了一個在線生成base64的網(wǎng)站,把這個圖片url放上去轉(zhuǎn)換,結(jié)果發(fā)現(xiàn)別人在線轉(zhuǎn)換出來的base64比我java代碼轉(zhuǎn)換的base64還長了很多。
為什么會這樣呢?
問題解答
回答1:InputStream 的 available() 返回的值是該InputStream 在不被阻塞的情況下,一次可以讀取到的數(shù)據(jù)長度。但網(wǎng)絡(luò)情況總是不定的,經(jīng)常阻塞。所以建議使用循環(huán)讀取 InputStream 中的數(shù)據(jù)。
回答2:讀取整個InputStream時,用Streams.copy()比穩(wěn)妥,例如題主這個例子中,可以是:
ByteArrayOutputStream baos = new ByteArrayOutputStream();Streams.copy(conn.getInputStream(), baos);String str = new BASE64Encoder(baos.toByteArray());回答3:
String imgURL = 'http://www.g3zj.net:8082/util.action?method=appauthimg&d_=99';ByteArrayOutputStream data = new ByteArrayOutputStream();try { // 創(chuàng)建URL URL url = new URL(imgURL); byte[] by = new byte[1024]; // 創(chuàng)建鏈接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod('GET'); conn.setConnectTimeout(5 * 1000); InputStream is = conn.getInputStream(); // 將內(nèi)容讀取內(nèi)存中 int len = -1; while ((len = is.read(by)) != -1) {data.write(by, 0, len); } // 關(guān)閉流 is.close();} catch (IOException e) { e.printStackTrace();}// 對字節(jié)數(shù)組Base64編碼BASE64Encoder encoder = new BASE64Encoder();System.out.println('data:image/jpg;base64,'+encoder.encode(data.toByteArray()));
然而樓主的代碼是可以用的,在我這里,只要加上data:image/jpg;base64,就好了
相關(guān)文章:
1. angular.js - angular獲取radio選項的值,在線等啊親,連續(xù)加班一個禮拜了……2. javascript - 關(guān)于unicode emoji表情問題3. java - svn導下來的項目,web-inf下怎么沒有l(wèi)ib文件呀?4. node.js - 微信小程序websocket連接問題5. button按鈕點擊了沒有任何反應(yīng)6. css3 隱藏文本7. node.js - express-session 怎么支持無 cookie 的微信小程序session8. python - HTML中的img標簽,如何在request.args里找到img標簽屬性?9. javascript - 關(guān)于addEventListener和attachEvent的兼容寫法疑問,求助!10. css - ul ol前邊的標記如何調(diào)整樣式呢
