Android 从相机拍摄照片并解码到base64

Android 从相机拍摄照片并解码到base64,android,kotlin,Android,Kotlin,我已经建立了我的Web服务,它将接收在base64中解码的图像 我已经写了这段代码,允许我从相机中拍摄一张照片,并将其放在ImageView中 我想拍摄这张照片并将其转换为base64字符串 有人能帮忙吗? 这是我的密码 class takepicActivity : AppCompatActivity() { val CAMERA_REQUEST_CODE = 0 var pic:Bitmap?=null var encoded_image:String?=null override fun

我已经建立了我的Web服务,它将接收在base64中解码的图像 我已经写了这段代码,允许我从相机中拍摄一张照片,并将其放在ImageView中 我想拍摄这张照片并将其转换为base64字符串 有人能帮忙吗? 这是我的密码

class takepicActivity : AppCompatActivity() {
val CAMERA_REQUEST_CODE = 0
var pic:Bitmap?=null
var encoded_image:String?=null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_takepic)
    val id = intent.getStringExtra("id")
    //click on return
    findViewById<TextView>(R.id.txt_return).setOnClickListener{
    val intent = Intent(applicationContext, HelloActivity::class.java)
    intent.putExtra("id",id)
    startActivity(intent)
    finish()
}
//take the pic

 val callCameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    if(callCameraIntent.resolveActivity(packageManager) != null)
        startActivityForResult(callCameraIntent,CAMERA_REQUEST_CODE)



}
fun BitMapToString(bitmap: Bitmap): String {
    val baos = ByteArrayOutputStream()
    bitmap.compress(Bitmap.CompressFormat.PNG, 100,baos)
   val b=baos.toByteArray()
    return Base64.encodeToString(b, Base64.DEFAULT)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
    CAMERA_REQUEST_CODE -> {
        if(resultCode == Activity.RESULT_OK && data != null){
            pic_here.setImageBitmap(data.extras.get("data") as Bitmap)


    }
        else{val intent = Intent(applicationContext, HelloActivity::class.java)
            startActivity(intent)
            finish() }

}
    else -> {Toast.makeText(this,"unrecognized request code", Toast.LENGTH_SHORT).show()}

}}




 }
class takepicActivity:AppCompatActivity(){
val摄像机请求代码=0
变量pic:位图?=null
var编码的_图像:字符串?=null
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_takepic)
val id=intent.getStringExtra(“id”)
//点击返回
findViewById(R.id.txt\u return).setOnClickListener{
val intent=intent(applicationContext,HelloActivity::class.java)
intent.putExtra(“id”,id)
星触觉(意图)
完成()
}
//照张相
val callCameraIntent=Intent(MediaStore.ACTION\u IMAGE\u捕获)
if(CallCameraInEvent.resolveActivity(packageManager)!=null)
startActivityForResult(调用CameraIntent、摄像头请求代码)
}
趣味位图字符串(位图:位图):字符串{
val baos=ByteArrayOutputStream()
compress(bitmap.CompressFormat.PNG,100,baos)
val b=baos.toByteArray()
返回Base64.encodeToString(b,Base64.DEFAULT)
}
重写activityResult(请求代码:Int,结果代码:Int,数据:Intent?){
super.onActivityResult(请求代码、结果代码、数据)
何时(请求代码){
摄像头\请求\代码->{
if(resultCode==Activity.RESULT\u OK&&data!=null){
pic_here.setImageBitmap(data.extras.get(“数据”)作为位图)
}
else{val intent=intent(applicationContext,HelloActivity::class.java)
星触觉(意图)
finish()}
}
else->{Toast.makeText(这是“无法识别的请求代码”,Toast.LENGTH\u SHORT.show()}
}}
}

在一个旧项目中,我做了以下工作:

public static String getEncodedFileContentBase64(final Context context, final Uri uri) {
    String encoded = "";
    if (context != null && uri != null) {
        InputStream inputStream;
        try {
            String filePath = getRealPathFromURI(context, uri);
            if (!TextUtils.isEmpty(filePath)) {
                inputStream = BitmapUtils.getImageFile(filePath);
                byte[] buffer = new byte[10 * ONE_KIO];
                int bytesRead;
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                Base64OutputStream base64OutputStream = new Base64OutputStream(outputStream, Base64.DEFAULT);
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    base64OutputStream.write(buffer, 0, bytesRead);
                }
                base64OutputStream.close();
                encoded = outputStream.toString();
            }
        } catch (Exception e) {
            LogUtils.e(TAG, "Exception when reading image file: " + e.getMessage());
        }
    }
    return encoded;
}
希望它能帮助您尝试以下方法: 要位图的ImageUri:

@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
                final Uri imageUri = data.getData();
                final InputStream imageStream = getContentResolver().openInputStream(imageUri);
                final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
                String encodedImage = encodeImage(selectedImage);
            }
        }
在base64中编码位图

  private String encodeImage(Bitmap bm)
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG,100,baos);
        byte[] b = baos.toByteArray();
        String encImage = Base64.encodeToString(b, Base64.DEFAULT);
        return encImage;
    }
从FilePath编码到base64:

private String encodeImage(String path){
        File imagefile = new File(path);
        FileInputStream fis = null;
        try{
            fis = new FileInputStream(imagefile);
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }
        Bitmap bm = BitmapFactory.decodeStream(fis);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG,100,baos);
        byte[] b = baos.toByteArray();
        String encImage = Base64.encodeToString(b, Base64.DEFAULT);
        //Base64.de
        return encImage;

    }