美文网首页
Android 将bitmap 将图片压缩到指定的大小

Android 将bitmap 将图片压缩到指定的大小

作者: hao_developer | 来源:发表于2021-06-17 09:51 被阅读0次

方法调用案例

val bitmap = PublicTools.tools.zoomImage(it,300.0,240.0)
PublicTools.tools.shareToWxProudct(this,path,bitmap)

压缩bitmap方法的封装

private fun imageZoom(bitMap:Bitmap): Bitmap {
        var newBitmap:Bitmap = bitMap
        //图片允许最大空间 单位:KB
        val maxSize = 128
        //将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
        val baos = ByteArrayOutputStream()
        bitMap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
        val b = baos.toByteArray()
        //将字节换成KB
        val mid = b.size / 1024.toDouble()
        //判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩
        if (mid > maxSize) {
            //获取bitmap大小 是允许最大大小的多少倍
            val i = mid / maxSize
            //开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍 (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小)
            newBitmap = zoomImage(
                bitMap, bitMap.getWidth() / Math.sqrt(i),
                bitMap.getHeight() / Math.sqrt(i)
            )
        }
        return newBitmap
    }


    fun zoomImage( bgimage: Bitmap, newWidth: Double,newHeight: Double): Bitmap {
        // 获取这个图片的宽和高
        val width = bgimage.width.toFloat()
        val height = bgimage.height.toFloat()
        // 创建操作图片用的matrix对象
        val matrix = Matrix()
        // 计算宽高缩放率
        val scaleWidth = newWidth.toFloat() / width
        val scaleHeight = newHeight.toFloat() / height
        // 缩放图片动作
        matrix.postScale(scaleWidth, scaleHeight)
        return Bitmap.createBitmap(
            bgimage, 0, 0, width.toInt(),
            height.toInt(), matrix, true
        )
    }

相关文章

网友评论

      本文标题:Android 将bitmap 将图片压缩到指定的大小

      本文链接:https://www.haomeiwen.com/subject/ajixeltx.html