Android 给图片加上水印的示例代码(支持logo+文字)
2017-08-01 16:48
671 查看
本文介绍了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, 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使用Intent.ACTION_SEND分享图片和文字内容的示例代码
- Android实现用文字生成图片的示例代码
- PHP加水印代码 支持文字和图片水印
- Android给图片加文字和图片水印实例代码
- 用java处理图片(压缩成小尺寸;加文字和logo水印)
- 支持代码高亮、图片水印、远程文件自动上传的fckeditor
- php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
- 生成加水印的图片类 (支持水印为图片或者文字)
- 一个Android实现图片的倒影效果的代码示例
- php下图片文字混合水印与缩略图实现代码
- php文字水印和php图片水印实现代码(二种加水印方法)
- android用WebView显示包含文字和图片的本地网页(支持放大缩小)
- Android示例代码:如何实现一个文字列表
- android 图片水印处理 文字倾斜处理
- PHP图片加水印代码示例解析
- PHP 上传图片,生成水印,支持文字, gif, png
- PHP图片水印函数:支持以图片和文字方式添加水印
- ASP.NET(C#)上传图片加上文字或图片水印
- PHP 上传图片,生成水印,支持文字, gif, png
- ASP.net 为上传的图片加上一个logo图片水印(生成图片质量非常高)