android 扩展函数,Android - 利用扩展函数为Bitmap添加文字水印

本文介绍了如何使用Kotlin为Bitmap添加文字水印,详细展示了缩放Bitmap和在右下角绘制水印的步骤。同时,探讨了ImageView的缩放方式,包括fitXY、fitStart等,解释了不同设置对图片显示的影响。通过理解这些技术,可以更好地在Android应用中处理图片和水印效果。
摘要由CSDN通过智能技术生成

项目技术分享系列——扩展函数为Bitmap添加文字水印canvas

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

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

a9588117678aec8e344d1717c0d2d6bf.png

给Bitmap添加文字水印

首先注意不能对进行拉伸或缩放前的Bitmap进行绘制水印,不然水印也会一块儿被拉伸缩放函数

应该提早将Bimap拉伸,再进行绘制操做字体

示例代码:this

//将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)code

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

/**

* 给一张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做为设置图片的来源,不然的话,会致使图片填充方式设置无效的状况。blog

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大小的图像(以显示完整图片为目标,对原图进行缩放)。

be57ee4e0a6cc80ff570022ce021740f.png

但愿对有须要的人有帮助~😊图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值