bitmap与base64的互转

/**
 * 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;
    }
}

Base64转Bitmap

public class Base64ToBitmap {

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

设置两个按钮

 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());

        }
    }

有base64格式的图片数据是“data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQ…==”这种格式的。
在上面的代码中开头的“data:image/jpeg;base64,”这一部分是不包含在内的;也就是说以上的代码中,如果你的base64格式开头中含有“data:image/jpeg;base64,”,是无法转为Bitmap的;从Bitmap转出来的base64格式的图片数据也是不包含“data:image/jpeg;base64,”,直接从“/9j/4AAQSkZJ…”开始的

猜你喜欢

转载自blog.csdn.net/qq_34215325/article/details/99877884