问题描述
我制作了一个 android 应用程序来从默认相机捕获图像,然后使用 bitmap.compress() 对其进行压缩,然后使用 PHP 将其上传到我的 MysqL 数据库。现在的问题是,使用位图我得到的图像质量非常低。我找到了一个解决方案,即使用 URI 而不是 Bitmap 来捕获图像。但是后来我不知道如何使用 URI '通过 PHP 将它上传到 MysqL'。有人可以将我的代码从 Bitmap 编辑为 URI 并向我输出一个“图像字符串”(就像代码中使用的“encoded_front”字符串变量一样),我可以将其传递给我的 PHP 脚本。非常感谢。
这是我的代码
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
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)