1. 程式人生 > >Android 圖片轉換為 Base64 編碼

Android 圖片轉換為 Base64 編碼

將圖片轉換成Base64編碼的字串

    /**
     * 將圖片轉換成Base64編碼的字串
     */
    public static String imageToBase64(String path){
        if(TextUtils.isEmpty(path)){
            return null;
        }
        InputStream is = null;
        byte[] data = null;
        String result = null;
        try{
            is = new FileInputStream(path);
            //建立一個字元流大小的陣列。
            data = new byte[is.available()];
            //寫入陣列
            is.read(data);
            //用預設的編碼格式進行編碼
            result = Base64.encodeToString(data,Base64.DEFAULT);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(null !=is){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
 
        }
        return result;
    }

Android端使用Base64加密解密時應使用Base64.NO_WRAP

其他幾種加密解密方式的含義:

CRLF:這個引數看起來比較眼熟,它就是Win風格的換行符,意思就是使用CR LF這一對作為一行的結尾而不是Unix風格的LF

DEFAULT:這個引數是預設,使用預設的方法來加密

NO_PADDING:這個引數是略去加密字串最後的“=”

NO_WRAP:這個引數意思是略去所有的換行符(設定後CRLF就沒用了)

URL_SAFE:這個引數意思是加密時不使用對URL和檔名有特殊意義的字元來作為加密字元,具體就是以-和_取代+和/

將Base64編碼的字串轉換成圖片

    /**
     * 將Base64編碼轉換為圖片
     * @param base64Str
     * @param path
     * @return true
     */
    public static boolean base64ToFile(String base64Str,String path) {
        byte[] data = Base64.decode(base64Str,Base64.NO_WRAP);
        for (int i = 0; i < data.length; i++) {
            if(data[i] < 0){
                //調整異常資料
                data[i] += 256;
            }
        }
        OutputStream os = null;
        try {
            os = new FileOutputStream(path);
            os.write(data);
            os.flush();
            os.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        }catch (IOException e){
            e.printStackTrace();
            return false;
        }
    }