Загрузка захваченного изображения с помощью volley при максимальном качестве kotlin

#android #kotlin #android-volley

#Android #kotlin #android-volley

Вопрос:

мне нужно загрузить изображение на сервер php, но мне нужно, чтобы изображение было максимально качественным, прежде чем оно будет захватывать и загружать растровое изображение, но мне нужно, чтобы изображение было четким, поэтому я попробовал этот код, но, похоже, он не работает.

итак, в основном мне нужно загрузить изображение, сохраненное в этой строке

 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri)
  
 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 amp;amp; 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)
    }