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

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

异空间项目技术分享:为Bitmap添加文字水印

在现代应用开发中,对图片进行版权标记或信息添加已成为常见需求。文字水印是一种简单有效的方式,不仅可以保护图片的版权,还能为用户提供额外的信息(例如视频缩略图)。本文将介绍如何为Bitmap添加文字水印,并探讨如何解决Bitmap在ImageView中的显示问题。

添加文字水印的方法

在进行水印绘制之前,首先需要对Bitmap进行适当的缩放处理。直接在未缩放的Bitmap上绘制水印可能导致水印在缩放过程中被拉伸或压缩,影响最终效果。建议先将Bitmap缩放到目标大小,再进行文字绘制。

以下是使用Kotlin编写的示例代码:

bitmap?.let {    // 缩放Bitmap至目标尺寸    val scaledBitmap = Bitmap.createScaledBitmap(        it.width.toFloat(),        it.height.toFloat(),        Bitmap.Config.ARGB_8888    ).addTextWatermark(        content = "用户名",        textSize = 14,        color = Color.WHITE,        x = (it.width - bounds.width) - 10f,        y = (it.height - bounds.height) + 10f,        recycle = false    )}

addTextWatermark是我们为Bitmap类扩展的一个方法,支持如下参数:

  • content:水印文本
  • textSize:文字大小(单位:px)
  • color:文字颜色
  • x:起始坐标X
  • y:起始坐标Y
  • recycle:是否回收内存

默认情况下,水印会在Bitmap的右下角绘制。如果需要定制位置,可以通过调整X和Y坐标进行调整。

解决图片显示问题

在Android开发中,ImageView加载Bitmap时,会根据设置的缩放方式(scaleType)对图片进行调整。不同缩放方式会导致图片在ImageView中的显示效果不同。以下是几种常见的缩放方式及其特点:

  • matrix:保持原图大小,从左上角开始绘制
  • fitXY:将图片水平方向拉伸至ImageView宽度
  • fitStart:沿左上角点按比例缩放
  • fitCenter:沿上方居中点按比例缩放
  • fitEnd:沿下方居中点按比例缩放
  • Center:以ImageView和图片的中心点为基准
  • centerCrop:以中心点为基准,裁剪至ImageView大小
  • centerInside:显示完整图片,缩放至ImageView大小

选择合适的缩放方式可以根据具体需求优化图片显示效果。例如,在需要保持图片原比例并展示完整时,可以选择centerInsidematrix方式。

通过合理设置scaleType,可以有效避免图片在ImageView中出现比例失调或部分被截断的情况。

总结

在本文中,我们探讨了为Bitmap添加文字水印的方法,并分析了ImageView中图片显示问题的解决方案。通过合理设置缩放方式,可以更好地控制图片的显示效果。希望以上内容能为开发者提供有价值的参考!

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

你可能感兴趣的文章
sum(a.YYSR) over (partition by a.hy_dm) 不需要像group by那样需要分组函数。方便。
查看>>
ORCHARD 是什么?
查看>>
Struts2中使用Session的两种方法
查看>>
Stream API:filter、map和flatMap 的用法
查看>>
STM32工作笔记0032---编写跑马灯实验---寄存器版本
查看>>
Static--用法介绍
查看>>
ssm旅游信息管理系统的设计与实现bus56(程序+开题)
查看>>
order by rand()
查看>>
SSM(Spring+SpringMvc+Mybatis)整合开发笔记
查看>>
ViewHolder的改进写法
查看>>
Orderer节点启动报错解决方案:Not bootstrapping because of 3 existing channels
查看>>
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement profile
查看>>
sql查询中 查询字段数据类型 int 与 String 出现问题
查看>>
org.apache.commons.beanutils.BasicDynaBean cannot be cast to ...
查看>>
org.apache.dubbo.common.serialize.SerializationException: com.alibaba.fastjson2.JSONException: not s
查看>>
sqlserver学习笔记(三)—— 为数据库添加新的用户
查看>>
org.apache.http.conn.HttpHostConnectException: Connection to refused
查看>>
org.apache.ibatis.binding.BindingException: Invalid bound statement错误一例
查看>>
org.apache.ibatis.exceptions.PersistenceException:
查看>>
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned
查看>>