<異空間>項目技術分享系列——擴展函數爲Bitmap添加文字水印canvas
對圖片Bitmap繪製文字水印仍是比較常見的需求,畢竟版權意識都在加強(用戶能夠給本身圖片加上用戶名),還能夠爲用戶提供更多的信息(例如視頻縮略圖)網絡
先上效果圖(比較簡單的效果,可繼續擴展實現),如下代碼使用Kotlin語言編寫ide
首先注意不能對進行拉伸或縮放前的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 }
設置ImageView填充方式的前提是使用src做爲設置圖片的來源,不然的話,會致使圖片填充方式設置無效的狀況。blog
但願對有須要的人有幫助~😊圖片