2016-10-04 73 views
0

我試過這段代碼:如何將位圖轉換爲base64字符串並保持相同的質量?

ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
mylistImg.get(i).compress(Bitmap.CompressFormat.PNG, 100, bao); 
byte[] ba = bao.toByteArray(); 
ba1 = Base64.encodeToString(ba, Base64.DEFAULT); 

但它降低了質量很多。因爲我想發送一個Base64字符串到PHP,我必須將我的位圖文件轉換爲字符串,而不會降低質量。 我讀過這些鏈接,但沒有得到任何特別的東西!

How to convert Bitmap to string without losing quality

編輯 我送BA1變量oracle數據庫的BLOB數據 但是當我看到在數據庫中的結果,圖像質量是非常低的。 ,我並沒有改變對圖像質量

+0

你爲什麼要壓縮數據,我們得到的字節數組的方式,而不是? –

+0

@MaskedMan他壓縮它在100%的質量,所以沒有實際的壓縮 –

+0

Base64不影響質量或以往。你的問題是錯誤的。 – greenapps

回答

0

我的PHP代碼中的任何嘗試這個,我只是改變了使用.compress方法

//b is the Bitmap 
Bitmap b=mylistImg.get(i); 
//calculate how many bytes our image consists of. 
int bytes = b.getByteCount(); 
//or we can calculate bytes this way. Use a different value than 4 if you don't use 32bit images. 
//int bytes = b.getWidth()*b.getHeight()*4; 

ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer 
b.copyPixelsToBuffer(buffer); //Move the byte data to the buffer 

byte[] ba= buffer.array(); 

ba1 = Base64.encodeToString(ba, Base64.DEFAULT); 
+0

這種壓縮方法沒有問題。此外,您現在創建服務器無法處理的數據。這使事情變得更糟。 OP已經誤導了我們,因爲他發佈的代碼中沒有任何內容會降低質量。 – greenapps

+0

所以我很驚訝,突然​​這個答案被標記爲正確的。 – greenapps

+0

@greenapps我做了一個假設,即使質量是100,壓縮方法也會進行一些壓縮,看起來我的假設是正確的。 但我不明白的是現在創建的服務器無法處理的數據是什麼?我們總是發送一個字符串,無視我們生成該字符串的方式。 我認爲這適用於OP,因爲它被標記爲接受。 –

相關問題