搜索
热搜: 活动 交友 discuz
查看: 4109|回复: 0
打印 上一主题 下一主题

Android添加文字水印和图片水印的正确方法

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2017-3-28 11:52:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开门见山,添加水印的方法非常简单,其实就只有3个步骤:
1、载入原始图片
2、载入水印图片
3、保存带有水印的图片
实现的原理就是:获取原始图片的宽高,然后,新建一个同样宽高的bitmap,将这个新的bitmap作为画布,接着,就在这个画布上面画原图,画水印图片,有文字就接着画文字。
上面哪个顺序一定不能乱,不然你可能就看不到水印,或则文字了,因为画在原图下面去了
绘制水印的代码如下:

  1. private static Bitmap createWaterMaskBitmap(Bitmap src, Bitmap watermark,
  2.                        int paddingLeft, int paddingTop) {
  3.    if (src == null) {
  4.      return null;
  5.    }
  6.    int width = src.getWidth();
  7.    int height = src.getHeight();
  8.    //创建一个bitmap
  9.    Bitmap newBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
  10.    //将该图片作为画布
  11.    Canvas canvas = new Canvas(newBitmap);
  12.    //在画布 0,0坐标上开始绘制原始图片
  13.    canvas.drawBitmap(src, 0, 0, null);
  14.    //在画布上绘制水印图片
  15.    canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);
  16.    // 保存
  17.    canvas.save(Canvas.ALL_SAVE_FLAG);
  18.    // 存储
  19.    canvas.restore();
  20.    return newBitmap;
  21. }
复制代码
绘制文字的代码如下:

  1. /**
  2.    * 绘制文字到中间
  3.    *
  4.    * @param context
  5.    * @param bitmap
  6.    * @param text
  7.    * @param size
  8.    * @param color
  9.    * @return
  10.    */
  11.   public static Bitmap drawTextToCenter(Context context, Bitmap bitmap, String text,
  12.                      int size, int color) {
  13.     Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
  14.     paint.setColor(color);
  15.     paint.setTextSize(dp2px(context, size));
  16.     Rect bounds = new Rect();
  17.     paint.getTextBounds(text, 0, text.length(), bounds);
  18.     return drawTextToBitmap(context, bitmap, text, paint, bounds,
  19.         (bitmap.getWidth() - bounds.width()) / 2,
  20.         (bitmap.getHeight() + bounds.height()) / 2);
  21.   }

  22.   /**
  23.    *  图片上绘制文字
  24.    */
  25.   private static Bitmap drawTextToBitmap(Context context, Bitmap bitmap, String text,
  26.                       Paint paint, Rect bounds, int paddingLeft, int paddingTop) {
  27.     Config bitmapConfig = bitmap.getConfig();

  28.     paint.setDither(true); // 获取跟清晰的图像采样
  29.     paint.setFilterBitmap(true);// 过滤一些
  30.     if (bitmapConfig == null) {
  31.       bitmapConfig = Config.ARGB_8888;
  32.     }
  33.     bitmap = bitmap.copy(bitmapConfig, true);
  34.     Canvas canvas = new Canvas(bitmap);

  35.     canvas.drawText(text, paddingLeft, paddingTop, paint);
  36.     return bitmap;
  37.   }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-5-15 03:57 , Processed in 0.081639 second(s), 36 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表