现在这是我从智能手机拍摄照片的代码,问题是图像很大,我想压缩它,有什么帮助或想法吗?
感谢信息
方法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)
}
当用户从权限请求弹出窗口中按下PERMIT或DENY时,会调用
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
}
}
答案 0 :(得分:1)
Gradle
dependencies {
implementation 'id.zelory:compressor:3.0.0'
}
压缩图像文件
val compressedImageFile = Compressor.compress(context, actualImageFile)
将图像文件压缩到特定位置
val compressedImageFile = Compressor.compress(context, actualImageFile) {
default()
destination(myFile)
}
使用默认约束和自定义约束
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
}
答案 1 :(得分:0)
您可以使用此库
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
}
希望这个答案对您有帮助
答案 2 :(得分:0)
使用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();