Android如何壓縮圖片上傳服務端

Albert_shui發表於2015-06-12

最近做有一個需求是開啟相機或相簿 獲取圖片 並將圖片上傳服務端  。但問題是圖片可以獲取到。傳伺服器的時候由於圖片太大上傳伺服器的時間太長。使用者體驗十分不好,於是在網上找方法 找了很多 覺得這個方法挺靠譜的。

public void Compresspic(final String path){
         new Thread(new Runnable() {//開啟多執行緒進行壓縮處理  
                private int options;

                @Override  
                public void run() {  
                    // TODO Auto-generated method stub  
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
                    options = 100;  
                    bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//質量壓縮方法,把壓縮後的資料存放到baos中 (100表示不壓縮,0表示壓縮到最小)  
                    while (baos.toByteArray().length / 1024 > 60) {//迴圈判斷如果壓縮後圖片是否大於60kb,大於繼續壓縮           
                        baos.reset();//重置baos即讓下一次的寫入覆蓋之前的內容   
                        options -= 10;//圖片質量每次減少10  
                        if(options<0)options=0;//如果圖片質量小於10,則將圖片的質量壓縮到最小值  
                        bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//將壓縮後的圖片儲存到baos中  
                        if(options==0)break;//如果圖片的質量已降到最低則,不再進行壓縮  
                    }  
                    try {  
                        FileOutputStream fos = new FileOutputStream(new File(path));//將壓縮後的圖片儲存的本地上指定路徑中  
                        fos.write(baos.toByteArray());  
                        fos.flush();  
                        fos.close();  
                        
                        Log.e("圖愛散股", path);
                        file = new File(path);// path為壓縮後的圖片路徑,將這個新生成的file申明為成員變數,後續會把這個file物件上傳服務端,後端自動識別
                        if(!file.exists()) {
                                ToastUtil.show(FeedbackActivity.this, "未找到上傳檔案");
                                return;
                            }
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    }  
                }  
            }).start();          
    }

 

傳入圖片路徑並對圖片進行處理,處理後用新的圖片覆蓋掉原來路徑的圖片




相關文章