Android 图片添加水印的实现方法
时间:2019-03-30
本文章向大家介绍Android 图片添加水印的实现方法,主要包括Android 图片添加水印的实现方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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开发的文章本站还有很多,欢迎大家搜索查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
- ssh 免密码设置失败原因总结
- C++服务器开发之基于对象的编程风格
- The jQuery UI CSS Framework
- hadoop:将WordCount打包成独立运行的jar包
- Hadoop: MapReduce2多个job串行处理
- UE4新手引导之下载和安装虚幻4游戏引擎
- mac 下卸载mysql的方法
- ZooKeeper 笔记(1) 安装部署及hello world
- mybatis 使用经验小结
- ZooKeeper 笔记(2) 监听数据变化
- 使用C# 和Consul进行分布式系统协调
- 设置 java -jar 的进程显示名称
- 爱浪携手豆瓣内容、腾讯共同发布AI语音耳机
- Win.ini和注册表的读取写入
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释