美文网首页
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