博客
关于我
Android - 利用扩展函数为Bitmap添加文字水印
阅读量:401 次
发布时间:2019-03-05

本文共 2339 字,大约阅读时间需要 7 分钟。

<异空间>项目技术分享系列——扩展函数为Bitmap添加文字水印

对图片Bitmap绘制文字水印还是比较常见的需求,毕竟版权意识都在增强(用户可以给自己图片加上用户名),还可以为用户提供更多的信息(例如视频缩略图)

先上效果图(比较简单的效果,可继续扩展实现),以下代码使用Kotlin语言编写

给Bitmap添加文字水印

首先注意不能对进行拉伸或缩放前的Bitmap进行绘制水印,否则水印也会一起被拉伸缩放

应该提前将Bimap拉伸,再进行绘制操作

示例代码:

//将Bitmap进行缩放,获得缩放完成后的Bitmap后,再绘制文字水印bitmap?.let {thumb ->    bitmap = Bitmap.createScaledBitmap( //缩放      thumb , ConvertUtils.dp2px(140F),      ConvertUtils.dp2px(100F),false     )    .addTextWatermark(length , ConvertUtils.dp2px(16F) , Color.WHITE ,0F,0F,false)}

addTextWatermark 方法是对Bitmap类的一个扩展方法(Kotlin)

下面示例代码目前只实现了在右下角绘制,可继续扩展:

/**     * 给一张Bitmap添加水印文字。     *     * @param content  水印文本     * @param textSize 水印字体大小 ,单位pix。     * @param color    水印字体颜色。     * @param x        起始坐标x     * @param y        起始坐标y     * @param recycle  是否回收     * @return 已经添加水印后的Bitmap     */    fun Bitmap.addTextWatermark(        content: String?,//文字内容        textSize: Int, //文字大小        color: Int, //文字颜色        x: Float, //x,y暂时比较难用,因为要指定具体位置,难以在外部直接测量文字的坐标        y: Float,        recycle: Boolean //Bitmap内存是否回收    ): Bitmap? {        if ( content == null)            return null        val ret = this.copy(this.config, true)        val paint = Paint(Paint.ANTI_ALIAS_FLAG)        val canvas = Canvas(ret)        paint.color = color        paint.textSize = textSize.toFloat()        //绘制文字        val bounds = Rect()        paint.getTextBounds(content, 0, content.length, bounds)        //默认在 Bitmap的 右下角位置开始绘制文字        canvas.drawText(content, this.width.toFloat()-bounds.width() - 20F , this.height.toFloat() - bounds.height() + 20F, paint)        if (recycle && !this.isRecycled)            this.recycle()        return ret    }

补充

Bitmap加载进ImageView,为什么会形状各异,是因为设置了不同的缩放方式

设置ImageView填充方式的前提是使用src作为设置图片的来源,否则的话,会导致图片填充方式设置无效的情况。

  • scaleType=“matrix” 是保持原图大小、从左上角的点开始,以矩阵形式绘图。
  • scaleType=“fitXY” 是将原图进行横方向(即XY方向)的拉伸后绘制的。
  • scaleType=“fitStart” 是将原图沿左上角的点(即matrix方式绘图开始的点),按比例缩放原图绘制而成的。
  • scaleType=“fitCenter” 是将原图沿上方居中的点(即matrix方式绘图第一行的居中的点),按比例缩放原图绘制而成的。
  • scaleType=“fitEnd” 是将原图沿下方居中的点(即matrix方式绘图最后一行的居中的点),按比例缩放原图绘制而成的。
  • scaleType=“Center” 是保持原图大小,以原图的几何中心点和ImagView的几何中心点为基准,只绘制ImagView大小的图像。
  • scaleType=“centerCrop” 不保持原图大小,以原图的几何中心点和ImagView的几何中心点为基准,只绘制ImagView大小的图像(以填满ImagView为目标,对原图进行裁剪)。
  • scaleType=“centerInside” 不保持原图大小,以原图的几何中心点和ImagView的几何中心点为基准,只绘制ImagView大小的图像(以显示完整图片为目标,对原图进行缩放)。

希望对有需要的人有帮助~😊

转载地址:http://uymzz.baihongyu.com/

你可能感兴趣的文章
M×N 形状 numpy.ndarray 的滑动窗口
查看>>
m个苹果放入n个盘子问题
查看>>
n = 3 , while n , continue
查看>>
n 叉树后序遍历转换为链表问题的深入探讨
查看>>
N!
查看>>
N-Gram的基本原理
查看>>
n1 c语言程序,全国青少年软件编程等级考试C语言经典程序题10道七
查看>>
Nacos Client常用配置
查看>>
nacos config
查看>>
Nacos Config--服务配置
查看>>
Nacos Derby 远程命令执行漏洞(QVD-2024-26473)
查看>>
Nacos 与 Eureka、Zookeeper 和 Consul 等其他注册中心的区别
查看>>
Nacos 单机集群搭建及常用生产环境配置 | Spring Cloud 3
查看>>
Nacos 启动报错[db-load-error]load jdbc.properties error
查看>>
Nacos 报Statement cancelled due to timeout or client request
查看>>
Nacos 注册服务源码分析
查看>>
Nacos 融合 Spring Cloud,成为注册配置中心
查看>>
Nacos-注册中心
查看>>
Nacos-配置中心
查看>>
Nacos2.X 源码分析:为订阅方推送、服务健康检查、集群数据同步、grpc客户端服务端初始化
查看>>