2012-10-23 108 views
1

之前壓縮圖像我使用此代碼轉換位圖的Base64將其發送到服務器

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, **quality**, baos); 
byte[] b = baos.toByteArray(); 
base64code = Base64.encodeToString(b, Base64.DEFAULT); 

,並在服務器端接收它,像這樣:

$strImage = preg_replace('!\s*!', '', trim($this->input->post('image'))); 
     $thefile = base64_decode($strImage); 
     $img = imagecreatefromstring($thefile); 
     //header('Content-Type: image/jpeg'); 
     header('Content-Type: bitmap; charset=utf-8'); 
     imagesavealpha($img, true); 
     imagejpeg($img,'./images/temp/testing.jpg',100); 
     imagedestroy($img); 

問題:

實際圖像SI澤其中我是從裝置畫廊拾取要發送到服務器是344 kb的當我設置質量= 0並顯示旋轉器對話框的util的的base64串被髮送到服務器花費5秒發送,並且在服務器側接收到的圖像是344 KB但如果我設置質量= 100花費60-70秒發送,以及i接收在服務器側的圖像是1.7 Mb

提問:

使用質量時,爲什麼我會得到實際大小= 0大5倍圖像時質量= 100

注:

當我am設置質量= 100並更改

imagejpeg($img,'./images/temp/testing.jpg',100); 

imagejpeg($img,'./images/temp/testing.jpg',10); 

需要60-70秒派,但在服務器端接收的圖像太小67 KB

謝謝

回答

1

我會認爲@EJTH是正確的,因爲0可能意味着根本不會重新壓縮圖像。任何其他值(1-100)可能會首先將圖像轉換爲位圖(這將非常大),然後壓縮到目標質量jpeg。此重新壓縮需要處理時間才能完成,因此您看到60-70秒的值不是0.

雖然之前我還沒有使用Bitmap#compress方法,所以上面是推測。

1

的PHP手冊當它表示0意味着最低質量時,它的意思是不要觸摸壓縮。

至於爲什麼它需要很長時間來壓縮你的圖片很難說,你自己託管或者您使用的是便宜的虛擬主機?

+0

PHP手冊??你的意思是Android?因爲我從來沒有嘗試在PHP中設置0。在Android中,當我使用質量= 0時,我得到了實際的圖像大小,但是當我使用質量= 100時,我獲得了5倍大的圖像 –

+0

好吧,誤解,因爲您提到的PHP函數也需要從0到100的質量參數。 – EJTH

+0

但是你的託管呢?由於它似乎沒有對這個問題做任何真正的分析,所以我認爲實際需要花費時間的是你的應用程序和你的服務器之間的通信,我可能是錯的,如果你不做imagejpeg()調用,你還在必須等待60-70秒才能發送圖像?如果不是它的PHP問題。 – EJTH