bitmapとbase 64の相互回転

3336 ワード

/**
 * Bitmap Base64   
 */
public class BitmapToBase64 {

    private static String result = null;
    public static String bitmapToBase64(Bitmap bitmap){
        ByteArrayOutputStream baos = null;
        try {
            if (bitmap != null) {
                baos = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);

                baos.flush();
                baos.close();

                byte[] bitmapBytes = baos.toByteArray();
                result = android.util.Base64.encodeToString(bitmapBytes, android.util.Base64.DEFAULT);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e){
            e.printStackTrace();
        } finally {
            try {
                if (baos != null) {
                    baos.flush();
                    baos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
}


Base 64回転Bitmap
public class Base64ToBitmap {

    public static Bitmap base64ToBitmap(String base64Data) {
        byte[] bytes = Base64.decode(base64Data, Base64.DEFAULT);
        return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    }
}

2つのボタンを設定
 btnToBase64.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //    
                Intent intent = new Intent(Intent.ACTION_PICK, null);
                intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
                startActivityForResult(intent, 1);//1 resultcode       
            }
        });
        btnToBitmap.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String strBase64 = editText.getText().toString();
                try {
                    Bitmap bitResult = Base64ToBitmap.base64ToBitmap(strBase64);//base64 Bitmap
                    ivImgSelect.setImageBitmap(bitResult);//ImageView         
                } catch (Exception e){
                    e.printStackTrace();
                }
            }
        });

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1){
            //         
            if (data != null) {
                Uri uri = data.getData();
                ivImgSelect.setImageURI(data.getData());
            }
            bitmap = ((BitmapDrawable) ((ImageView) ivImgSelect).getDrawable()).getBitmap();
            strBase64 = BitmapToBase64.bitmapToBase64(bitmap);
            editText.setText(strBase64);
            Log.d("code",editText.getText().toString());

        }
    }

base 64形式の画像データは、「data:image/jpeg;base 64,/9 j/4 AAQSkZJRgABAQAAQUAAQUBAAD/2 wBDAAAEBAQEBAQEBAQ...=」という形式である.上のコードで始まる「data:image/jpeg;base 64」の部分は含まれていません.すなわち、上記のコードでは、base 64フォーマットの先頭に「data:image/jpeg;base 64」が含まれている場合は、Bitmapに移行できません.Bitmapから転送されたbase 64形式の画像データも「data:image/jpeg;base 64,」、「/9 j/4 AAQSkZJ...」から直接含まれていない