我制作了一个 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