最近做的一個專案需求是將Android圖庫的圖片轉為base64存到資料庫
然后用C#winfrom來顯示出來
轉出來的圖片是這個熊樣 查完資料以后說是Android和C#的base64轉換出來的結果不同
有無大佬指導指導

java:
public String BitmapStrByBase64(Bitmap bit){
ByteArrayOutputStream bos=new ByteArrayOutputStream();
bit.compress(Bitmap.CompressFormat.JPEG, 100, bos);//引數100表示不壓縮
byte[] bytes=bos.toByteArray();
return Base64.encodeToString(bytes, Base64.DEFAULT);
}
C#:
public Bitmap Base64StringToImage(string strbase64)
{
try
{
byte[] arr = Convert.FromBase64String(strbase64);
MemoryStream ms = new MemoryStream(arr);
bmp = new Bitmap(ms);
ms.Close();
return bmp;
}
catch (Exception ex)
{
return null;
}
}
uj5u.com熱心網友回復:
SoS!!!uj5u.com熱心網友回復:
SOS!!!uj5u.com熱心網友回復:
Sosssssss!!!uj5u.com熱心網友回復:
你把同一段byte[]用C#和java分別編碼,然后對比下,是否相同。我覺得不一定是base64編碼的問題,圖片格式的問題也有可能。uj5u.com熱心網友回復:
我嘗試過不同格式的圖片 jpg jpeg png都試過了
uj5u.com熱心網友回復:
這也是令我費解的地方 我把轉出來的數值存盤在txt然后拿出來復制到資料庫 然后圖片在winfrom上根本顯示不出來 不知道為啥uj5u.com熱心網友回復:
請讓你安卓的人換引數由于Android的Base64編碼是默認換行,因此在進行服務器驗證的時候,會出現驗證失敗的情況,這是由于服務器那邊的解碼不支持換行符模式,所以編碼時需要增加flag標志,android總共有以下幾個flag。
flag種類如下:
DEFAULT 默認模式
NO_WRAP 過濾換行符
NO_PADDING 過濾結束符=
URL_SAFE 將+,/換成-,_
CRLF 換行符模式 選中windows而不是unix的lf
你現在那個引數,安卓會換行,而且還用的是unix的換行
uj5u.com熱心網友回復:
我就是那個寫安卓的...那把引數換成NO_WRAP 以后還是這樣子

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/16222.html
標籤:C#
下一篇:網頁頭中怎么去掉服務器的ip地址
