Android 在max qualtiy kotlin使用截击上传捕获的图像

Android 在max qualtiy kotlin使用截击上传捕获的图像,android,kotlin,android-volley,Android,Kotlin,Android Volley,我需要上传图像到php服务器,但我需要在它将捕获和上传位图之前,图像的最高质量,但我需要图像是清晰的,所以我尝试了这段代码,但似乎无法让它工作 所以基本上我需要上传存储在这条线上的图像 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri) 类捕获:AppCompatActivity(){ 私有val权限\ U代码=1000; 专用val图像捕获代码=1001 var image_uri:uri?=null 变量位图:位图?=null

我需要上传图像到php服务器,但我需要在它将捕获和上传位图之前,图像的最高质量,但我需要图像是清晰的,所以我尝试了这段代码,但似乎无法让它工作

所以基本上我需要上传存储在这条线上的图像

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri)
类捕获:AppCompatActivity(){ 私有val权限\ U代码=1000; 专用val图像捕获代码=1001 var image_uri:uri?=null 变量位图:位图?=null 重写创建时的乐趣(savedInstanceState:Bundle?){ super.onCreate(savedInstanceState) setContentView(R.layout.activity\u捕获) //按钮点击 btn_take_photo.setOnClickListener{ //如果系统操作系统是棉花糖或以上,我们需要请求运行时权限 if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.M){ if(checkSelfPermission(Manifest.permission.CAMERA) ==PackageManager.PERMISSION\u被拒绝|| checkSelfPermission(Manifest.permission.WRITE\u外部存储) ==PackageManager.PERMISSION\u被拒绝){ //权限未启用 val permission=arrayOf(Manifest.permission.CAMERA,Manifest.permission.WRITE\u外部存储) //显示弹出窗口以请求权限 请求权限(权限、权限\代码) } 否则{ //已授予许可 openCamera() } } 否则{ //系统操作系统<棉花糖 openCamera() } } } 私人娱乐openCamera(){ val values=ContentValues() value.put(MediaStore.Images.Media.TITLE,“新图片”) value.put(MediaStore.Images.Media.DESCRIPTION,“从相机中”) image\u uri=contentResolver.insert(MediaStore.Images.Media.EXTERNAL\u CONTENT\u uri,值) //摄像机意图 val cameraIntent=Intent(MediaStore.ACTION\u IMAGE\u捕获) cameraIntent.putExtra(MediaStore.EXTRA_输出,图像_uri) startActivityForResult(摄像机帐篷、图像捕获码) } 重写onRequestPermissionsResult(请求代码:Int,权限:Array,GrantResult:IntArray){ //当用户在权限请求弹出窗口中按允许或拒绝时调用 何时(请求代码){ 权限\u代码->{ 如果(grantResults.size>0&&grantResults[0]== PackageManager.权限(已授予){ //已授予弹出窗口的权限 openCamera() } 否则{ //来自弹出窗口的权限被拒绝 Toast.makeText(这是“拒绝许可”,Toast.LENGTH\u SHORT.show()) } } } } 重写activityResult(请求代码:Int,结果代码:Int,数据:Intent?){ super.onActivityResult(请求代码、结果代码、数据) //在从摄影机捕获图像时调用 if(resultCode==Activity.RESULT\u确定){ val takenImage:Bitmap=BitmapFactory.decodeFile(image\u uri.toString()) //将捕获的图像设置为图像视图 imgv_capture_image_preview.setImageURI(image_uri) val url=connection.server\u url+“body\u pictures.php” val rq:RequestQueue=Volley.newRequestQueue(此) val sr=object:StringRequest(Method.POST、url、Response.Listener{Response-> val检查:字符串=响应 val checknew=check.replace(“\\s.toRegex(),”) 如果(checknew==“成功”){ Toast.makeText( 这 “图像上传成功”, 吐司,长度 ).show() }否则{ Toast.makeText( 这 “错误图像上载失败,”+checknew, 吐司,长度 ).show() } },Response.ErrorListener{error-> Toast.makeText( 这 “服务器超时”, 吐司,长度 ).show() }) { 重写fun getParams():MutableMap{ val map=HashMap() val images=takenImage?.let{getStringImage(it)} 如果(图像!=null){ map.put(“图像数据”,图像) } 返回图 } } rq.add(sr) } } 有趣的getStringImage(位图:位图):字符串{ val baos=ByteArrayOutputStream() bitmap.compress(bitmap.CompressFormat.JPEG,100,baos) val b=baos.toByteArray() 返回Base64.encodeToString(b,Base64.DEFAULT) }
class capture : AppCompatActivity() {

    private val PERMISSION_CODE = 1000;
    private val IMAGE_CAPTURE_CODE = 1001
    var image_uri: Uri? = null
    var bitmap: Bitmap? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_capture)

        //button click
        btn_take_photo.setOnClickListener {
            //if system os is Marshmallow or Above, we need to request runtime permission
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                if (checkSelfPermission(Manifest.permission.CAMERA)
                    == PackageManager.PERMISSION_DENIED ||
                    checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_DENIED){
                    //permission was not enabled
                    val permission = arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    //show popup to request permission
                    requestPermissions(permission, PERMISSION_CODE)
                }
                else{
                    //permission already granted
                    openCamera()
                }
            }
            else{
                //system os is < marshmallow
                openCamera()
            }
        }
    }

    private fun openCamera() {
        val values = ContentValues()
        values.put(MediaStore.Images.Media.TITLE, "New Picture")
        values.put(MediaStore.Images.Media.DESCRIPTION, "From the Camera")
        image_uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
        //camera intent
        val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri)
        startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE)
    }


    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        //called when user presses ALLOW or DENY from Permission Request Popup
        when(requestCode){
            PERMISSION_CODE -> {
                if (grantResults.size > 0 && grantResults[0] ==
                    PackageManager.PERMISSION_GRANTED){
                    //permission from popup was granted
                    openCamera()
                }
                else{
                    //permission from popup was denied
                    Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show()
                }
            }
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        //called when image was captured from camera intent
        if (resultCode == Activity.RESULT_OK){

            val takenImage: Bitmap = BitmapFactory.decodeFile(image_uri.toString())

            //set image captured to image view
            imgv_capture_image_preview.setImageURI(image_uri)

            val url = connection.server_url + "body_pictures.php"
            val rq: RequestQueue = Volley.newRequestQueue(this)
            val sr = object : StringRequest(Method.POST, url, Response.Listener { response ->

                val check: String = response

                val checknew = check.replace("\\s".toRegex(), "")

                if (checknew == "success") {






                    Toast.makeText(
                        this,
                        "Image uploaded Successful",
                        Toast.LENGTH_LONG
                    ).show()
                } else {





                    Toast.makeText(
                        this,
                        "ERROR image upload failed, " + checknew,
                        Toast.LENGTH_LONG
                    ).show()


                }

            }, Response.ErrorListener  { error ->


                Toast.makeText(
                    this,
                    "Server TIME OUT",
                    Toast.LENGTH_LONG
                ).show()
            }) {
                override fun getParams(): MutableMap<String, String> {
                    val map = HashMap<String, String>()
                    val images = takenImage?.let { getStringImage(it) }
                    if (images != null) {
                        map.put("image_data", images)
                    }


                    return map
                }


            }
            rq.add(sr)












        }
    }

    fun getStringImage(bitmap: Bitmap): String? {
        val baos = ByteArrayOutputStream()
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
        val b = baos.toByteArray()
        return Base64.encodeToString(b, Base64.DEFAULT)
    }