簡體   English   中英

在 Android (Java) 中將選定的圖像轉換為 base64 字符串

[英]Convert selected image into base64 string in Android (Java)

按鈕單擊打開相機,拍照並嘗試將所選圖片轉換為 base64 字符串但不起作用。 請檢查下面的代碼。

        private static final int CAMERA_PIC_REQUEST = 1337;
    Button upload;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
     upload = findViewById(R.id.upload);
          upload.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
                }
            });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
            Bitmap image = (Bitmap) data.getExtras().get("data");
            ImageView imageview = (ImageView) findViewById(R.id.uploadimage);
            imageview.setImageBitmap(image);

            String directoryPath = Environment.getExternalStorageDirectory() + "/";
            String filePath = directoryPath+Long.toHexString(System.currentTimeMillis())+".png";
            File directory = new File(directoryPath);
            if (!directory.exists()) {
                directory.mkdirs();
            }
            System.out.print(filePath);
            System.out.print(Uri.fromFile( new File(filePath) ));

            File imageFile = new File(filePath);
            Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream);
            byte[] image1 = stream.toByteArray();
            String img_str = Base64.encodeToString(image1, 0);
}

我在下面的代碼中將靜態圖像轉換為 base64 字符串,但我想拍照並轉換為 base64 字符串。

       Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),  R.drawable.testimage);
        ByteArrayOutputStream bao = new ByteArrayOutputStream();
        bitmapOrg.compress(Bitmap.CompressFormat.PNG, 100, bao);
        byte [] ba = bao.toByteArray();
        String ba1=Base64.encodeToString(ba,Base64.DEFAULT);
        System.out.print(ba1);

請按照獲取實際圖像。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
     {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
           Bitmap photo = (Bitmap) data.getExtras().get("data");
           String imgString = toBase64(photo);
          }
     }

public String toBase64(Bitmap bm) {

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
    byte[] b = baos.toByteArray();

    return Base64.encodeToString(b, Base64.NO_WRAP);
}

我的理解是,你需要對拍攝的照片做兩件事:

  1. 在 imageView 中顯示圖片。
  2. 將圖片轉換為 base64 字符串。

要做這兩件事,你不需要在你自己的代碼中編寫圖片文件。 您已經使用以下代碼獲得了來自相機的位圖:

Bitmap pictureFromCamera = (Bitmap) data.getExtras().get("data");

現在只需使用

imageView.setImageBitmap(pictureFromCamera)

要將其轉換為 base64,只需將pictureFromCamera轉換為 base64 即可

String base64StringOfCameraPic = getBase64StringFromBitmap(pictureFromCamera , 100)

String getBase64StringFromBitmap(Bitmap bitmap, int quality)
{
    if (bitmap == null || quality < 0)
    {
        return null;
    } else
    {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, quality, byteArrayOutputStream);
        byte[] byteArray = byteArrayOutputStream.toByteArray();
        return Base64.encodeToString(byteArray, Base64.DEFAULT);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM