Android 给图片加上水印的示例代码(支持logo+文字)

Android 给图片加上水印的示例代码(支持logo+文字),第1张

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

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

现在我们想要往图片上打上水印,该水印应符合这样的需求的:

支持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,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*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),paddingtop));}/** * 设置水印图片在右下角 * @param src * @param watermark * @param paddingRight * @param paddingBottom * @return */public static Bitmap createWaterMaskRightBottom(    Context context,int paddingRight,int paddingBottom) {  return createWaterMaskBitmap(src,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,int paddingtop) {  return createWaterMaskBitmap( src,paddingtop));}/** * 设置水印图片到左下角 * @param src * @param watermark * @param paddingleft * @param paddingBottom * @return */public static Bitmap createWaterMaskleftBottom(    Context context,paddingBottom));}/** * 绘制水印图片 * @param src 原图 * @param watermark 水印 * @param paddingleft * @param paddingtop * @return */private static Bitmap createWaterMaskBitmap(Bitmap src,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,null);  //在画布上绘制水印图片  canvas.drawBitmap(watermark,paddingleft,paddingtop,null);  // 保存  canvas.save(Canvas.ALL_SAVE_FLAG);  // 存储  canvas.restore();  return newb;}

绘制后的效果应该是这样的,欢迎拍砖~

给图片加上水印.png

附上源代码:github传送门

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android 给图片加上水印的示例代码(支持logo+文字)全部内容,希望文章能够帮你解决Android 给图片加上水印的示例代码(支持logo+文字)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145485.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存