热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android图片添加水印的实现方法

这篇文章主要介绍了Android图片添加水印的实现方法的相关资料,添加水印的原理就是在画布Canvas上绘制图形、图片、文字等等,得到你想要的效果图片,需要的朋友可以参考下

Android 图片添加水印的实现方法

实现效果图:

手机端打水印(文字和图片)使用的是Bitmap、Matrix和Canvas类的一些方法, 可以实现拉伸、旋转、位移等等效果。 原理很简单, 就是在画布Canvas上绘制图形、图片、文字等等, 得到你想要的效果图片。

百度搜索图片打水印有很多结果, 没找到斜着打水印的代码,有很多公司都要求上图的效果, 所以写着玩玩。

 /*
   添加全屏斜着45度的文字
   /
  public static Bitmap drawCenterLable(Context context, Bitmap bmp, String text) {
    float scale = context.getResources().getDisplayMetrics().density;
    //创建一样大小的图片
    Bitmap newBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.ARGB_8888);
    //创建画布
    Canvas canvas = new Canvas(newBmp);
    canvas.drawBitmap(bmp, 0, 0, null);  //绘制原始图片
    canvas.save();
    canvas.rotate(45); //顺时针转45度
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.argb(50, 255, 255, 255)); //白色半透明
    paint.setTextSize(100 scale);
    paint.setDither(true);
    paint.setFilterBitmap(true);
    Rect rectText = new Rect();  //得到text占用宽高, 单位:像素
    paint.getTextBounds(text, 0, text.length(), rectText);
    double beginX = (bmp.getHeight()/2 - rectText.width()/2) * 1.4;  //45度角度值是1.414
    double beginY = (bmp.getWidth()/2 - rectText.width()/2) * 1.4;
    canvas.drawText(text, (int)beginX, (int)beginY, paint);
    canvas.restore();
    return newBmp;
  }

使用44KB的png图片验证效率:

long begin = System.currentTimeMillis();
Bitmap destBmp = ImageUtil.drawCenterLable(this, sourBitmap, "某某公司专用");
long end = System.currentTimeMillis();
Log.d("brycegao", "打水印用时:" + (end-begin) + "毫秒");
mWartermarkImage.setImageBitmap(destBmp);

小米4手机输出: D/brycegao: 打水印用时:69毫秒

使用3M字节的jpg图片测试打水印,报OOM错误。

 java.lang.OutOfMemoryError: Failed to allocate a 467251212 byte allocation with 16767536 free bytes and 110MB until OOM
                                        at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                                        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                                        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:613)
                                        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:446)
                                        at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:469)
                                        at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:501)

手机端使用Android原生方法打水印, 应该先将压缩分辨率, 避免OOM的情况, 但是影响清晰度; 大部分app都是将原图传到服务器, 在后台打水印。

因为原生方法有分辨率和内存限制, 听说七牛的图片库(支持打水印)很好用, 看看是否可以落地到各种配置的android手机中。

以上就是对Android 添加水印的方法详解,关于Android开发的文章本站还有很多,欢迎大家搜索查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


推荐阅读
  • Git支持通过自定义钩子来扩展其功能,这些钩子根据触发条件的不同,可以分为客户端和服务器端两种类型。客户端钩子通常与本地操作相关联,如提交代码或合并分支;而服务器端钩子则与远程仓库的交互有关。 ... [详细]
  • 近期,谷歌公司的一名安全工程师Eduardo Vela在jQuery Mobile框架中发现了一项可能引发跨站脚本攻击(XSS)的安全漏洞。此漏洞使得使用jQuery Mobile的所有网站面临潜在的安全威胁。 ... [详细]
  • 本文提供了2023年最新的解决方案,帮助用户了解如何在移动设备上顺利访问和浏览PHP网页,涵盖从基础设置到高级技巧的全方位指导。 ... [详细]
  • Web App vs Native App:未来的移动应用趋势
    随着移动互联网的发展,Web App和Native App之间的竞争日益激烈。对于开发者而言,选择哪一种技术路径更为明智?本文将深入探讨两种应用模式的特点及未来趋势。 ... [详细]
  • 本文探讨了在Koa框架下,如何在启动服务前检查指定端口是否已被占用的方法,并提供了相应的代码示例。 ... [详细]
  • 本文从数据埋点的设计者视角出发,全面解析数据埋点的技术原理、应用场景及其管理方法,涵盖基础知识、实施策略、数据处理流程等内容。 ... [详细]
  • 本文介绍了如何设计并实现一个基于Java的聊天室系统,旨在检验个人Java技能掌握程度及满足实验室任务需求。该系统不仅支持基本的文字交流,还涵盖了多媒体文件传输、表情发送等功能。 ... [详细]
  • 博主从零开始学习HTML(入门基础)
    从零开始学习HTML(入门基础)互联网三大基石HTTP协议URL:统一资源定位符HTML:超文本标记语言HTML的Head标签中的常用元素<!--告知 ... [详细]
  • 本章深入探讨了现代客户端设计,特别是使用 ASP.NET Core 和 Blazor 构建高效用户界面的方法。 ... [详细]
  • 本文详细介绍了如何在两台运行 Windows Server 2003 的计算机上配置两个 MySQL 实例以实现主从复制。每台计算机分别命名为 Master 和 Slave,确保系统分区及 MySQL 安装路径的正确配置。 ... [详细]
  • 解决ASP.NET Core在IIS中出现的502.5进程失败错误
    本文详细探讨了在Windows Server 2012环境下安装.NET Core后,IIS站点出现502.5错误的原因及解决方案,包括重启服务和系统的方法。 ... [详细]
  • 本文提供了详细的步骤,介绍如何将基于Maven的Java EE项目从Eclipse IDE部署到JBoss应用服务器上。适合初学者和中级开发者参考。 ... [详细]
  • Node.js与npm安装及Vue项目搭建指南
    本文详细介绍了如何安装Node.js和npm,以及如何使用npm安装Vue及其相关工具,包括vue-router和vue-cli,并创建一个简单的Vue项目。 ... [详细]
  • 云计算是一种基于互联网的服务模式,用户可以在任何时间、任何地点访问这些服务。这里的‘云’是对互联网的隐喻表达,代表了一种虚拟化的计算资源池。云计算可以分为私有云、公有云、混合云等多种类型,每种类型都有其特定的应用场景和服务对象。 ... [详细]
  • Python学习笔记:使用MyQR库创建动态彩色二维码
    本文介绍了如何利用Python的MyQR库来生成动态彩色二维码,包括库的安装方法、基本使用案例以及参数详解,特别针对动态图生成速度过快的问题提供了解决方案。 ... [详细]
author-avatar
吴静爽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有