0

我制作了一个 android 应用程序来从默认相机捕获图像,然后使用 bitmap.compress() 对其进行压缩,然后使用 PHP 将其上传到我的 MySQL 数据库。现在的问题是,使用位图我得到非常低质量的图像。我找到了一个解决方案,即使用 URI 来捕获图像而不是位图。但后来我不知道如何使用 URI '通过 php 将其上传到 mysql'。有人可以将我的代码从位图编辑到 URI 并输出我可以传递给我的 php 脚本的“图像字符串”(就像代码中使用的“encoded_front”字符串变量一样)。万分感谢。

这是我的代码

front_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Dexter.withContext(getApplicationContext())
                        .withPermission(Manifest.permission.CAMERA)
                        .withListener(new PermissionListener() {
                            @Override
                            public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
                                Intent front_image=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                startActivityForResult( front_image,111);
                            }

                            @Override
                            public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {

                            }

                            @Override
                            public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
                                permissionToken.continuePermissionRequest();
                            }
                        }).check();
            }
        });
upload_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                insert_db();
            }
        });
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if(requestCode==111 && resultCode==RESULT_OK)
        {
            bitmap=(Bitmap)data.getExtras().get("data");
            encodebitmap(bitmap,1);
        }
        
        super.onActivityResult(requestCode, resultCode, data);
    }
private void encodebitmap(Bitmap bitmap,int i)
    {
        if(i==1)
        {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);

            byte[] byteofimages = byteArrayOutputStream.toByteArray();
            encoded_front = android.util.Base64.encodeToString(byteofimages, Base64.DEFAULT);
// encoded_front is a global string variable

        }
private void insert_db()
    {
 StringRequest request=new StringRequest(Request.Method.POST, apiurl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response)
            {
                
                
                Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_LONG).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_LONG).show();
            }
        })
        {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError
            {
                Map<String,String> map=new HashMap<String, String>();
               
                map.put("front_face",encoded_front);
                
                return map;
            }
        };

        RequestQueue queue= Volley.newRequestQueue(getApplicationContext());
        queue.add(request);
        


    }  // end of function
4

0 回答 0