如何使用Kotlin在Android中压缩照片



现在这是我从智能手机拍照的代码,问题是图像很大,我想压缩它,一些帮助或想法?

感谢您的信息

执行方法abrircamara((

private fun abrirCamara() {
    val values = ContentValues()
    values.put(MediaStore.Images.Media.TITLE, "Nueva foto")
    values.put(MediaStore.Images.Media.DESCRIPTION, "Desde la camara")
    image_uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
    //intención de la cámara
    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) {
    when(requestCode){
        PERMISSION_CODE -> {
            if (grantResults.size > 0 && grantResults[0] ==
                PackageManager.PERMISSION_GRANTED){
                //permiso de popup fue concedido
                abrirCamara()
            }
            else{
                //el permiso de popup fue denegado
                Toast.makeText(this, "Permiso denegado", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

从摄像机的意图捕获图像

时呼叫
     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    //Llamada cuando la imagen fue capturada desde la intención de la cámara
    if (resultCode == Activity.RESULT_OK){

        //configurar imagen capturada a vista de imagen (ImageView)
        imgEnvio.setImageURI(image_uri)        
        captura_btn.visibility =View.INVISIBLE
        siguiente.visibility=View.VISIBLE
    }
}

使用Compressor

gradle

dependencies {
implementation 'id.zelory:compressor:3.0.0'
}

压缩图像文件

val compressedImageFile = Compressor.compress(context, actualImageFile)

将图像文件压入特定目的地

val compressedImageFile = Compressor.compress(context, actualImageFile) {
default()
destination(myFile)
}

使用IT的默认约束和自定义部分

val compressedImageFile = Compressor.compress(context, actualImageFile) {
default(width = 640, format = Bitmap.CompressFormat.WEBP)
}

完整的自定义约束

val compressedImageFile = Compressor.compress(context, actualImageFile) {
resolution(1280, 720)
quality(80)
format(Bitmap.CompressFormat.WEBP)
size(2_097_152) // 2 MB
}
val compressedImageFile = Compressor.compress(context, actualImageFile) {
    resolution(1280, 720)
    quality(80)
    format(Bitmap.CompressFormat.WEBP)
    size(2_097_152) // 2 MB
    }
val compressedImageFile = Compressor.compress(context, actualImageFile) {
    resolution(1280, 720)
    quality(80)
    format(Bitmap.CompressFormat.WEBP)
    size(2_097_152) // 2 MB
    }
val compressedImageFile = Compressor.compress(context, actualImageFile) {
    resolution(1280, 720)
    quality(80)
    format(Bitmap.CompressFormat.WEBP)
    size(2_097_152) // 2 MB
}

您可以使用此库

implementation 'id.zelory:compressor:2.1.0'

更改代码

从您的代码中,您的图像文件名是 rutafinal

//if you need bitmap
val bitmap = Compressor(this).compressToBitmap(rutaFinal)
//if you need file
val compressedImageFile = Compressor(this).compressToFile(rutaFinal)

完成代码

 if (resultCode == Activity.RESULT_OK){

        //configurar imagen capturada a vista de imagen
        imgEnvio.setImageURI(image_uri)
        pasar = image_uri.toString()

        val tempUri = image_uri
        val rutaFinal = File(getRealPathFromURI(tempUri))
        pasoRuta=rutaFinal.toString()
        //chnage here
        //pass context to Compressor
        val bitmap = Compressor(this).compressToBitmap(rutaFinal);

        captura_btn.visibility =View.INVISIBLE
        siguiente.visibility=View.VISIBLE
    }

使用resizer

compile 'com.github.hkk595:Resizer:v1.5'

传递原始图像文件,并将调整大小的图像作为新文件

获取
File resizedImage = new Resizer(this)
    .setTargetLength(1080)
    .setQuality(80)
    .setOutputFormat("JPEG")
    .setOutputFilename("resized_image")
    .setOutputDirPath(storagePath)
    .setSourceImage(originalImage)
    .getResizedFile();

最新更新