如何在Android中以相对较好的质量调整和压缩图像?

如何在Android中以相对较好的质量调整和压缩图像?,android,image,image-processing,kotlin,Android,Image,Image Processing,Kotlin,所以我想限制上传到服务器的文件大小,我希望图像大小在250kb左右,上传到服务器的质量相对较好。目前,我只能减少文件大小,但图像质量较差 例如,我有原始jpeg图像尺寸1000x1000,它的大小是150kb。我尝试将宽度和高度(为了减小文件大小)减小到450 x 450,然后文件大小变为137kb,文件大小只是减小了一点点,但质量很低。如果从150kb减少到137kb,我希望质量相对接近 我不知道如何减小整个文件大小,因此我假设可以通过将宽度和高度减小到450x450来减小文件大小 以下是我使

所以我想限制上传到服务器的文件大小,我希望图像大小在250kb左右,上传到服务器的质量相对较好。目前,我只能减少文件大小,但图像质量较差

例如,我有原始jpeg图像尺寸1000x1000,它的大小是150kb。我尝试将宽度和高度(为了减小文件大小)减小到450 x 450,然后文件大小变为137kb,文件大小只是减小了一点点,但质量很低。如果从150kb减少到137kb,我希望质量相对接近

我不知道如何减小整个文件大小,因此我假设可以通过将宽度和高度减小到450x450来减小文件大小

以下是我使用的代码:

从库中选择图像后,Uri将转换为位图:

val originalSizeEventPosterBitmap = MediaStore.Images.Media.getBitmap(mActivity.contentResolver, eventPosterUri)
然后,我将位图的大小调整为450x450

val resizedEventPosterBitmap = Bitmap.createScaledBitmap(originalSizeEventPosterBitmap,450,450,true)
我将图像存储在Firebase存储中,它需要以ByteArray数据类型传输文件(也可以以Uri数据类型传输)。因此,我先将位图从
resizedEventPosterBitmap
转换为ByteArray,然后再使用以下功能将其上载到服务器:

fun getBytesArrayFromBimap(image: Bitmap) : ByteArray {
        val stream = ByteArrayOutputStream()
        image.compress(Bitmap.CompressFormat.JPEG, 100, stream)
        val bytesArrayData = stream.toByteArray()
        image.recycle()
        return bytesArrayData
    }
然后将该函数的结果发送到服务器

当您想将图像上载到服务器时,是否可以共享代码或库以减小图像大小


因为我上面使用的代码仍然使图像大小相当大,图像质量较低

下面的链接可能会对您有所帮助,非常感谢,使用这些库将在压缩和调整图像大小方面产生非常好的效果