为图片增加水印我们可以通过canvas来绘制,首先我们新创建一个工具类:

object WaterMarkHelper {    fun createWaterMaskBitmap(context: Activity?, src: Bitmap, watermark: String, paddingLeft: Int, paddingTop: Int): Bitmap {        //底层图片宽高        val width = src.width        val height = src.height        val paint = Paint()        //初始化笔        with(paint) {            color = Color.parseColor("#ffe5e5e5")            isAntiAlias = true            textSize = 24f        }        //测量文字宽度        val textWidth = paint.measureText(watermark).toInt()        //创建一个bitmap        val newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)// 创建一个新的和SRC长度宽度一样的位图        val canvas = Canvas(newBitmap)        //将该图片作为画布,绘制开始坐标根据图片宽高决定        canvas.drawBitmap(src, (canvas.width - width) / 2f,                (canvas.height - height) / 2f, null)             //绘制水印        for (i in paddingTop..height step 150) {            for (j in paddingLeft..width step 150 + textWidth) {                canvas.drawText(watermark, j.toFloat(), i.toFloat(), paint)            }        }        // 保存        canvas.save()        // 存储        canvas.restore()        return newBitmap    }

调用下载图片,添加水印,并且刷新图库:

private fun downFile(bitMap: Bitmap, saveDir: String) {    val fileName = Date().time.toString() + ".jpg"    val file = File(saveDir)    if (!file.exists()) {        file.mkdir()//如果路径不存在就先创建路径    }    //多重File目录下再次新建File对象,否则拿到的不是文件,而是路径    val picFile = File(file, fileName)    try {            //绘制水印          val newBitmap =    WaterMarkHelper.createWaterMaskBitmap(mActivity, bitMap, userName                    ?: "", 10, 10)        val fos = FileOutputStream(picFile)        //通过io流的方式来压缩保存图片        val isSuccess = newBitmap.compress(Bitmap.CompressFormat.JPEG, 60, fos)        fos.flush()        fos.close()        //把文件插入到系统图库        //2020/1/11 android X 弃用insertImage()方法,直接设置IS_PENDING        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {            MediaStore.Images.Media.IS_PENDING        } else {            MediaStore.Images.Media.insertImage(context?.contentResolver, picFile.absolutePath, fileName, null)        }        //保存图片后发送广播通知更新数据库        val uri = Uri.fromFile(picFile)        context?.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri))           } catch (e: IOException) {        e.printStackTrace()    }  }

更多相关文章

  1. android ImageView 图片宽度全屏,高度自适应的写法
  2. android客户端连接人人网之二----获取朋友信息
  3. 【转】Android有效解决加载大图片时内存溢出的问题
  4. Android(安卓)Input设备debug技巧
  5. android 使用 ffmpeg 进行视频转码(一)
  6. Android手机拍照(Android学习随笔九)
  7. 图片处理
  8. 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveI
  9. android中的hdpi,ldpi,mdpi

随机推荐

  1. 打好Android基础,实战中运用基础
  2. iOS设备蓝牙类库的选择
  3. 如何将音视频发布到移动设备,android,ios,ip
  4. 记一次(IDA+实机)附加调试Android原生库过
  5. Android面试系列之一
  6. 【Android】解决使用Dialog + EdiText 实
  7. 产品中,不明白与思考
  8. Android仿京东首页轮播文字(又名垂直跑马
  9. 初学Android,手势翻页效果(四十九)
  10. Android(安卓)实现书籍翻页效果---番外篇