本文介绍了Android 给图片加上水印的示例代码(支持logo+文字),分享给大家,具体如下:

现在我们想要往图片上打上水印,该水印应符合这样的需求的:
粗略的结构图低配版大概就长这样...
水印结构图.png
现在提供这样的一种思路去实现这一个需求,我们可以通过自定义一个view,view的布局中包含logo、公司名称和相关信息,这个view就是我们要打上图片的水印。
这样的一个view其实是一个自定义组合布局,关于如何实现组合布局的自定义view,可以参考这篇文章:Android 自定义View实践之组合控件实现布局的复用
有了水印的view之后,我们就可以利用以下这个方法,得到水印的view的Bitmap。
/**
* 将一个view转换为Bitmap
* @param view
* @return
*/
public static Bitmap convertViewToBitmap(View view){
view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
return bitmap;
}
得到水印的view的Bitmap之后,处理一下尺寸,保持水印的尺寸在合理范围内。
//根据原图处理要生成的水印的宽高
float width = sourBitmap.getWidth();
float height = sourBitmap.getHeight();
float be = width / height;
if ((float) 16 / 9 >= be && be >= (float) 4 / 3) {
//在图片比例区间内16;9~4:3内,将生成的水印bitmap设置为原图宽高各自的1/5
waterBitmap = WaterMaskUtil.zoomBitmap(waterBitmap, (int) width / 5, (int) height / 5);
} else if (be > (float) 16 / 9) {
//生成4:3的水印
waterBitmap = WaterMaskUtil.zoomBitmap(waterBitmap, (int) width / 5, (int) width*3 / 20);
} else if (be < (float) 4 / 3) {
//生成4:3的水印
waterBitmap = WaterMaskUtil.zoomBitmap(waterBitmap, (int) height*4 / 15, (int) height / 5);
}
然后将它按照要求绘制在原图上,提供生成左上、右上、右下和左下四个位置的水印各自的方法,关键代码如下:
/**
* 设置水印图片在左上角
* @param src
* @param watermark
* @param paddingLeft
* @param paddingTop
* @return
*/
public static Bitmap createWaterMaskLeftTop(
Context context, Bitmap src, Bitmap watermark,
int paddingLeft, int paddingTop) {
return createWaterMaskBitmap(src, watermark,
dp2px(context, paddingLeft), dp2px(context, paddingTop));
}
/**
* 设置水印图片在右下角
* @param src
* @param watermark
* @param paddingRight
* @param paddingBottom
* @return
*/
public static Bitmap createWaterMaskRightBottom(
Context context, Bitmap src, Bitmap watermark,
int paddingRight, int paddingBottom) {
return createWaterMaskBitmap(src, watermark,
src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight),
src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom));
}
/**
* 设置水印图片到右上角
* @param src
* @param watermark
* @param paddingRight
* @param paddingTop
* @return
*/
public static Bitmap createWaterMaskRightTop(
Context context, Bitmap src, Bitmap watermark,
int paddingRight, int paddingTop) {
return createWaterMaskBitmap( src, watermark,
src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight),
dp2px(context, paddingTop));
}
/**
* 设置水印图片到左下角
* @param src
* @param watermark
* @param paddingLeft
* @param paddingBottom
* @return
*/
public static Bitmap createWaterMaskLeftBottom(
Context context, Bitmap src, Bitmap watermark,
int paddingLeft, int paddingBottom) {
return createWaterMaskBitmap(src, watermark, dp2px(context, paddingLeft),
src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom));
}
/**
* 绘制水印图片
* @param src 原图
* @param watermark 水印
* @param paddingLeft
* @param paddingTop
* @return
*/
private static Bitmap createWaterMaskBitmap(Bitmap src, Bitmap watermark,
int paddingLeft, int paddingTop) {
if (src == null) {
return null;
}
int width = src.getWidth();
int height = src.getHeight();
//创建一个bitmap
Bitmap newb = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
//将该图片作为画布
Canvas canvas = new Canvas(newb);
//在画布 0,0坐标上开始绘制原始图片
canvas.drawBitmap(src, 0, 0, null);
//在画布上绘制水印图片
canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);
// 保存
canvas.save(Canvas.ALL_SAVE_FLAG);
// 存储
canvas.restore();
return newb;
}
绘制后的效果应该是这样的,欢迎拍砖~
给图片加上水印.png
附上源代码:github传送门
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 图片加水印
# 给图片加水印
# Android视频处理之动态时间水印效果
# Android添加水印的正确方法 只要三步!
# Android实现为图片添加水印
# Android给任何view添加全屏倾斜水印
# Android 图片添加水印的实现方法
# Android给图片加文字和图片水印实例代码
# android实现文字水印效果 支持多行水印
# Android图片添加水印图片并把图片保存到文件存储的实现代码
# Android实现分享长图并且添加全图水印
# Android可配置透明度的水印
# 自定义
# 结构图
# 标上
# 创建一个
# 是一个
# 这一
# 是这样
# 我们可以
# 公司名称
# 给大家
# 相关信息
# 这篇文章
# 将它
# 可以选择
# 设置为
# 转换为
# 将该
# 源代码
# 大家多多
# 如何实现
相关文章:
建站VPS配置与SEO优化指南:关键词排名提升策略
Python路径拼接规范_跨平台处理说明【指导】
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
Android自定义listview布局实现上拉加载下拉刷新功能
香港服务器如何优化才能显著提升网站加载速度?
孙琪峥织梦建站教程如何优化数据库安全?
西安大型网站制作公司,西安招聘网站最好的是哪个?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
高防服务器如何保障网站安全无虞?
C#如何在一个XML文件中查找并替换文本内容
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
如何在搬瓦工VPS快速搭建网站?
深圳网站制作培训,深圳哪些招聘网站比较好?
深圳网站制作案例,网页的相关名词有哪些?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
网站网页制作专业公司,怎样制作自己的网页?
如何通过建站之星自助学习解决操作问题?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
C#怎么使用委托和事件 C# delegate与event编程方法
一键网站制作软件,义乌购一件代发流程?
PHP 500报错的快速解决方法
如何打造高效商业网站?建站目的决定转化率
如何做静态网页,sublimetext3.0制作静态网页?
css网站制作参考文献有哪些,易聊怎么注册?
手机网站制作与建设方案,手机网站如何建设?
如何在Ubuntu系统下快速搭建WordPress个人网站?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何选择高性价比服务器搭建个人网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
网站制作软件有哪些,制图软件有哪些?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
如何快速完成中国万网建站详细流程?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何获取上海专业网站定制建站电话?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
建站之星代理平台如何选择最佳方案?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
中山网站制作网页,中山新生登记系统登记流程?
家庭服务器如何搭建个人网站?
如何通过虚拟主机快速完成网站搭建?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何用5美元大硬盘VPS安全高效搭建个人网站?
常州企业网站制作公司,全国继续教育网怎么登录?
,石家庄四十八中学官网?
*请认真填写需求信息,我们会在24小时内与您取得联系。