Android拍摄照片、视频添加水印功能
最近项目中需要实现拍摄照片、视频添加水印的需求,在网上找了一圈都没找到特别好用的三方,于是自己借鉴其他库实现了一个拍摄照片及视频添加水印的功能,本项目中的水印均以图片的形式添加进去!!!
先看下效果图吧(GIF图片一直上传不上去,只能演示下静态图片,动态图片可以上Github查看)
实现原理也很简单,图片水印就是将拍摄的照片转成bitmap,然后将水印内容以图片或者文字的形式绘制到一起去,视频水印通过RxFFmpeg库来实现的,该库实现的方式不是拍摄实时添加水印,而是视频拍摄好后,提供水印图片合成到视频中去的方式实现。
核心代码
/*** 绘制图片水印*/public void stampImage(Bitmap masterBitmap, Bitmap watermark, StampPadding padding, int requestId) {int width = masterBitmap.getWidth();int height = masterBitmap.getHeight();Paint paint = new Paint();paint.setFilterBitmap(true);Bitmap newBitmap = null;Canvas canvas = null;try {newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);canvas = new Canvas(newBitmap);canvas.drawBitmap(masterBitmap, 0, 0, paint);canvas.drawBitmap(watermark, padding.left, padding.top-watermark.getHeight(), paint);canvas.save();canvas.restore();if (mStampWatcher != null) {mStampWatcher.onSuccess(newBitmap,requestId);}} catch (Exception e) {if (mStampWatcher != null) {mStampWatcher.onError(e.getMessage(),requestId);}}}
/*** 绘制文字水印*/public void stampText(Bitmap masterBitmap, String label, int labelSize, int labelColor, StampPadding padding, int requestId) {Paint paint = new Paint();paint.setFilterBitmap(true);paint.setDither(true);paint.setColor(labelColor);paint.setTextSize(labelSize);Bitmap newBitmap = null;Canvas canvas = null;try {Bitmap.Config config = masterBitmap.getConfig();if (config == null) {config = Bitmap.Config.ARGB_8888;}newBitmap = masterBitmap.copy(config, true);canvas = new Canvas(newBitmap);canvas.drawText(label, padding.left, padding.top, paint);
// canvas.save(Canvas.ALL_SAVE_FLAG); 在androidP上会报错,修改为canvas.save()canvas.save();canvas.restore();if (mStampWatcher != null) {mStampWatcher.onSuccess(newBitmap,requestId);}} catch (Exception e) {if (mStampWatcher != null) {mStampWatcher.onError(e.getMessage(),requestId);}}}
/*** 添加视频水印* rxjava方式调用*/private void runFFmpegRxJava() {openProgressDialog();//下面text中有三个本地地址,第一个地址为视频原文件地址,第二个地址为图片水印地址,第三个地址为添加水印后视频文件地址final String text = "ffmpeg -y -i /storage/emulated/0/221.mp4 -i /storage/emulated/0/c3.png -filter_complex [0:v]scale=iw:ih[outv0];[1:0]scale=0.0:0.0[outv1];[outv0][outv1]overlay=0:200 -preset superfast /storage/emulated/0/1/225.mp4";String[] commands = text.split(" ");myRxFFmpegSubscriber = new MyRxFFmpegSubscriber(this);//开始执行FFmpeg命令RxFFmpegInvoke.getInstance().runCommandRxJava(commands).subscribe(myRxFFmpegSubscriber);}/*** 这里设为静态内部类,防止内存泄露*/public static class MyRxFFmpegSubscriber extends RxFFmpegSubscriber {private WeakReference<HomeFragment> mWeakReference;public MyRxFFmpegSubscriber(HomeFragment homeFragment) {mWeakReference = new WeakReference<>(homeFragment);}@Overridepublic void onFinish() {final HomeFragment mHomeFragment = mWeakReference.get();if (mHomeFragment != null) {mHomeFragment.cancelProgressDialog("处理成功");}}@Overridepublic void onProgress(int progress, long progressTime) {final HomeFragment mHomeFragment = mWeakReference.get();if (mHomeFragment != null) {//progressTime 可以在结合视频总时长去计算合适的进度值mHomeFragment.setProgressDialog(progress, progressTime);}}@Overridepublic void onCancel() {final HomeFragment mHomeFragment = mWeakReference.get();if (mHomeFragment != null) {mHomeFragment.cancelProgressDialog("已取消");}}@Overridepublic void onError(String message) {final HomeFragment mHomeFragment = mWeakReference.get();if (mHomeFragment != null) {mHomeFragment.cancelProgressDialog("出错了 onError:" + message);}}}
最后贴上GitHub地址:https://github.com/Roc0323/WatermarkShoot
Android拍摄照片、视频添加水印功能相关推荐
- Android 微信小视频录制功能实现
目录 开发之前 开发环境 相关知识点 开始开发 案例预览 案例分析 搭建布局 视频预览的实现 自定义双向缩减的进度条 录制事件的处理 长按录制 抬起保存 上滑取消 双击放大(变焦) 实现视频的录制 实 ...
- Android 拍摄照片后返回缩略图的两种方法详解
博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
- 1920+1080+android三星手机,三星Galaxy Note3能拍摄1080p视频吗?支持1080p播放吗?
三星Galaxy Note3能拍摄1080p视频吗 三星Galaxy Note3能拍摄1080p视频,支持1080p(1920×1080,30帧/秒)视频录制. 三星Galaxy Note3的机身边框 ...
- Android调用相机拍摄照片并显示到 ImageView控件中
在前面的一篇文章中曾介绍过简单的开启相机照相功能,详见 Android简单调用相机Camera功能,实现打开照相功能 ,这一次就会将前面拍摄的照片显示到ImageView中,形成一个完整的效果 看实 ...
- Android拍摄raw照片,这20款摄影APP,让你的照片飞上天!
原标题:这20款摄影APP,让你的照片飞上天! 在简书上有位叫作"老刘用手机拍电影"的摄影师,按他的自我介绍说:"我看过 10000 部电影.现在,我正用手机拍一部长片. ...
- Android - WebView接入H5客服照片/视频上传
webView加载H5,主要是解决上传图片和视频的问题. 1)Activity定义一些常量变量 private static final int REQUEST_CODE_PERMISSION_CAM ...
- android 图片 生成视频,照片制作成视频的方案有吗?如何视频安卓手机视频编辑器将手机里的照片制作成视频...
狸窝是帮助用户解决问题 提供教程解决方案 在这个过程中有使用我们自己开发的软件 也有网上找的工具 只要帮助用户解决问题就好!同意即往下继续了解下载 ... 在现在这个信息时代,几乎都是人手一部智能手机 ...
- android照片备份软件下载,照片视频备份软件下载-照片视频备份 安卓版v1.0.1-PC6安卓网...
照片视频备份是一款非常好用的照片视频备份软件,软件功能强大,有充足的内存空间可以帮助用户备份照片和视频,还有多重加密保护,让你的隐私得到保护. 软件介绍 照片视频备份app下载,很明显这是一款帮助大家 ...
- Android仿微信小视频录制功能
还没看完,应该还不错,先收藏,觉得可以开拓 https://blog.csdn.net/u012227600/article/details/50835633 -------------------- ...
最新文章
- 基于曲率的体素聚类的三维激光雷达点云实时鲁棒分割方法
- android8 Notification
- STM32 进阶教程 1 - micropython 移植
- CentOS 7.6 MySQL 8.0 RPM包方式安装及新特性介绍
- Eclipse 一直Building Workspace 的解决办法
- Tensorflow -mofan1
- Mac在命令行中打开Finder
- pe卸载win10更新补丁_新图标+新功能!win10凌晨更新补丁
- Java帧率,android应用性能优化之帧率 - hellominefriend的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- jpg、jpeg、png... 的区别
- 好东西再安利一遍!!
- Hadoop配置Yarn
- 易语言html代码解释器,易语言执行javascript
- Java数组的三种打印方式
- matlab 信号去直流,Speex中的近端信号去直流和预加重操作
- 矩阵转置matlab的函数,【ZZ】Matlab矩阵操作
- 电子内窥镜的研究现状及发展趋势
- 程序员被离职赔偿18万,房贷八千,只够还一年半,领导:回来上班
- 和monkey的相处日记
- 跨境支付行业洗牌在即:本月底必须登记 支付机构不得再“借牌照”
热门文章
- 【Codeforces 1083A】The Fair Nut and the Best Path
- BZOJ 1787 [Ahoi2008]Meet紧急集合 题解与分析
- 怎样把不同的文字合并成一组文字文本?
- Vmware WorkStation的三种联网方式
- d盘不见了 计算机打不开,d盘不见了怎么办 d盘不见了原因及解决方法
- 终端切换python环境_mac命令行切换python版本
- 面试过阿里的P7大佬分享:180+道Java面试题目!含答案解析!
- Linux操作系统的基础知识
- 树莓派4B入门及应用
- 为何安装MySQL后每天会有cmd弹窗