Преобразовать выбранное изображение в строку base64 в Android (Java) - PullRequest
0 голосов
/ 05 февраля 2020

Нажмите кнопку, чтобы открыть камеру, сделать снимок и попытаться преобразовать выбранное изображение в строку 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);
}

Я работал ниже кода для конвертирования изображения stati c в строку 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);

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Пожалуйста, следуйте этому , чтобы получить реальное изображение.

@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);
}
0 голосов
/ 05 февраля 2020

Что я понимаю, вам нужно сделать две вещи с полученным снимком:

  1. Показать изображение в imageView.
  2. Преобразовать изображение в строку base64.

Чтобы сделать эти две вещи, вам не нужно записывать изображение в файл с собственным кодом. Вы уже получили растровое изображение с камеры, используя следующий код:

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

Теперь просто покажите его в imageView, используя

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...