2012-04-30 64 views
2

論壇的好朋友。將圖像序列化爲字符串

我一直在尋找很多,我找不到如何序列化圖像並將其傳遞給android中的字符串。

可能不是這樣,如果有人知道並想告訴我,我將非常感激!

+0

爲什麼你想「序列化圖像並將其傳遞給字符串」? – CommonsWare

+0

看看這個問題:http://stackoverflow.com/questions/2781545/convert-image-to-base64-string-using-java – Marcelo

+0

我需要使用XML將它發送到Web服務。 我需要將圖像發送到(圖片序列化) 以及許多其他標籤及其內容。 – JulioStyle88

回答

1

儘管java.awt.Image類不是(不實現)java.io.Serializable,javax.swing.ImageIcon是。正因爲如此,你可以按如下序列化:

ImageIcon myImage; // declare somewhere 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(myImage); 
byte[] theBytes = baos.toByteArray(); 
StringBuffer buf = new StringBuffer(); 
for (byte b : theBytes) { 
    buf.append((char) b); // cast to char, then append 
} 
String theString = b.toString(); 

我會讓你知道如何扭轉這種局面,但這裏有一個提示:不是OutputStream類,使用InputStream類。

+2

Android上沒有Awt或Swing。只是說:)。 – Brayden

+0

哦。我的錯。沒有注意到它是Android。 :) – wchargin

1

你可以讀取圖像的字節到byte[],然後使用Base64編碼byte[]Here是如何。

1

Base64將是在字符串中可靠傳輸二進制數據(如圖像)的最有效方法。

然而,由於您要求更小的東西,你可以考慮base64編碼圖像,然後壓縮得到的線,然後base64編碼是...

它爲您節省了幾個字節,但不是很多。在某些情況下,甚至可能會使結果更大。

如果你有控制服務器和客戶端,你應該考慮創建另一個接口,允許你發送字節。