在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 圖片的 Base64 編解碼
多分辨率適配常用目錄
Android 開發(fā)環(huán)境(Eclipse+ADT+Android 5.0)
Android 原型設(shè)計工具探索
Makefile 快速入門
Android Studio的NDK開發(fā)
人臉檢測-靜態(tài)
getprop 與 dumpsys 命令
Maven 編譯開源二維碼掃描項目 zxing
畫布 Canvas
組合控件
Linux 下的模擬器硬件加速
讀取 Excel
android.hardware.camera2 使用指南
橫豎屏切換
Ubuntu 下切換 JDK 版本
拍照和錄像 with Camera
文本與布局
按鈕控制 ViewPager 的左右翻頁
用 TableLayout 偽裝表格顯示數(shù)據(jù)
Preference Activity 使用詳解
模擬器如何重啟?試試 Genymotion!
獲得屏幕物理尺寸、密度及分辨率
語音識別
了解 native activity
Android Studio 導(dǎo)入第三方類庫、jar 包和 so 庫
啟動另一個 App/apk 中的 Activity
APK 簽名
兩個開源的圖表/報表控件
android studio 導(dǎo)出 jar 包(Module)并獲得手機(jī)信息
圖片的 Base64 編解碼
混淆與反編譯
Android Studio 和 Gradle
Android 5.1 SDK 下載與配置
persistableMode 與 Activity 的持久化
adb 取出安裝在手機(jī)中的 apk
Android Studio 中的源代碼管理
Handler 使用中可能引發(fā)的內(nèi)存泄漏

圖片的 Base64 編解碼

通常用 Base64這種編解碼方式將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成可見的字符串格式,就是我們常說的大串,10塊錢一串的那種,^_^。

Android 的 android.util 包下直接提供了一個功能十分完備的 Base64類供我們使用,下面就演示一下如何將一張圖片進(jìn)行 Base64的編解碼。

1.找到那張圖片

    public void onEncodeClicked(View view) {

            //select picture
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(intent, OPEN_PHOTO_FOLDER_REQUEST_CODE);
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if(OPEN_PHOTO_FOLDER_REQUEST_CODE == requestCode   && RESULT_OK == resultCode) {

               //encode the image
                Uri uri = data.getData();
                try {
                    //get the image path
                    String[] projection = {MediaStore.Images.Media.DATA};
                    CursorLoader cursorLoader = new CursorLoader(this,uri,projection,null,null,null);
                    Cursor cursor = cursorLoader.loadInBackground();
                    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    cursor.moveToFirst();

                    String path = cursor.getString(column_index);
                    Log.d(TAG,"real path: "+path);
                    encode(path);
                } catch (Exception ex) {
                    Log.e(TAG, "failed." + ex.getMessage());
                }
            }
        }

2.將圖片轉(zhuǎn)換成 bitmap 并編碼

    private void encode(String path) {
                    //decode to bitmap
                    Bitmap bitmap = BitmapFactory.decodeFile(path);
                    Log.d(TAG, "bitmap width: " + bitmap.getWidth() + " height: " + bitmap.getHeight());
                    //convert to byte array
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
                    byte[] bytes = baos.toByteArray();

                    //base64 encode
                    byte[] encode = Base64.encode(bytes,Base64.DEFAULT);
                    String encodeString = new String(encode);
                    mTvShow.setText(encodeString);
    }

3.將大串還原成圖片

    public void onDecodeClicked(View view) {
        byte[] decode = Base64.decode(mTvShow.getText().toString(),Base64.DEFAULT);
        Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);
        //save to image on sdcard
        saveBitmap(bitmap);
    }

    private void saveBitmap(Bitmap bitmap) {
        try {
            String path = Environment.getExternalStorageDirectory().getPath()
                    +"/decodeImage.jpg";
            Log.d("linc","path is "+path);
            OutputStream stream = new FileOutputStream(path);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
            stream.close();
            Log.e("linc","jpg okay!");
        } catch (IOException e) {
            e.printStackTrace();
            Log.e("linc","failed: "+e.getMessage());
        }
    }

需要注意的是,一張圖片的編碼速度會很慢,如果圖片很大就更慢了。畢竟手機(jī)的處理能力有限。不過 decode 的速度確實(shí)相當(dāng)?shù)目?,超出你的想象。好了,就是這樣簡單,今天就到這里了,晚安!