Отправка растрового изображения с android на python сервер через TCP - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть проект, который в основном делает снимок с вашего телефона и отправляет его на сервер для распознавания текста и перевода текста, который был распознан, но у меня есть одна небольшая проблема, и проект должен быть завтра.

когда я отправляю изображение по tcp на мой python сервер, либо он поврежден, либо я вообще не могу его открыть.

вот мой код сервера:

        for x in range (int(self.data)):
        image += c.csocket.recv(1024).decode(errors='replace')
    with open("imageToSave.png", "wb") as fh:
        fh.write(image)

вот клиентская сторона:

    @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode != RESULT_CANCELED) {
        if (requestCode == 0 && resultCode  == RESULT_OK) {
            Bitmap bitMap = (Bitmap) data.getParcelableExtra("bitmap");
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitMap.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();
            String base64String = Base64.getEncoder().encodeToString(byteArray);
            System.out.println(base64String.length());
            ArrayList<String> imageToSend = new ArrayList<String>();
            int count = (base64String.length() / 1024) + 1;
            for (int i = 0;i<count;i++) {
                if (i < count - 1)
                    imageToSend.add(base64String.substring(i * 1024, (i+1)*1024));
                else
                    imageToSend.add(base64String.substring(i * 1024));
            }
            c.sendPacket("{'request':'translate', 'data':'" +imageToSend.size() + "'}");
            for (String stringToSend:imageToSend) {
                c.sendPacket(stringToSend);
            }
        }
    }
}

   @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_camera);
    imageView = (ImageView)findViewById(R.id.imageView);
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, 0);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode != RESULT_CANCELED) {
        if (requestCode == 0) {
            Bitmap bitMap = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(bitMap);
            Intent intent = getIntent();
            setResult(RESULT_OK, intent);
            intent.putExtra("bitmap", bitMap);
            finish();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...