Android 图片添加水印图片或者文字

时间:2023-12-17 20:20:02

给图片添加水印的基本思路都是载入原图,添加文字或者载入水印图片,保存图片这三个部分

添加水印图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private Bitmap createWaterMaskImage(Context gContext, Bitmap src, Bitmap watermark)
    {
        String tag = "createBitmap";
        Log.d(tag, "create a new bitmap");
        if (src == null)
        {
            return null;
        }      
        int w = src.getWidth();
        int h = src.getHeight();
        int ww = watermark.getWidth();
        int wh = watermark.getHeight();
        // create the new blank bitmap
        Bitmap newb = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
        Canvas cv = new Canvas(newb);
        // draw src into
        cv.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入src
        // draw watermark into
        cv.drawBitmap(watermark, 20, 20, null);// 在src的右下角画入水印
        // save all clip
        cv.save(Canvas.ALL_SAVE_FLAG);// 保存
        // store
        cv.restore();// 存储
        return newb;
    }

添加文字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public static Bitmap scaleWithWH(Bitmap src, double w, double h) {
          if (w == 0 || h == 0 || src == null) {
              return src;
          } else {
              // 记录src的宽高
              int width = src.getWidth();
              int height = src.getHeight();
              // 创建一个matrix容器
              Matrix matrix = new Matrix();
              // 计算缩放比例
              float scaleWidth = (float) (w / width);
              float scaleHeight = (float) (h / height);
              // 开始缩放
              matrix.postScale(scaleWidth, scaleHeight);
              // 创建缩放后的图片
              return Bitmap.createBitmap(src, 0, 0, width, height, matrix, true);
          }
      }
   
  public Bitmap drawTextToBitmap(Context gContext,  
            int gResId,  
            String gText) { 
            Resources resources = gContext.getResources(); 
            float scale = resources.getDisplayMetrics().density; 
            Bitmap bitmap =  
                BitmapFactory.decodeResource(resources, gResId); 
              
            bitmap = scaleWithWH(bitmap, 300*scale, 300*scale);
             
            android.graphics.Bitmap.Config bitmapConfig = 
                bitmap.getConfig(); 
             
             
             
            // set default bitmap config if none 
            if(bitmapConfig == null) { 
              bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888; 
            
            // resource bitmaps are imutable,  
            // so we need to convert it to mutable one 
            bitmap = bitmap.copy(bitmapConfig, true); 
              
            Canvas canvas = new Canvas(bitmap); 
            // new antialised Paint 
            Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
            // text color - #3D3D3D 
            paint.setColor(Color.RED);   
            paint.setTextSize((int) (18 * scale));             
             paint.setDither(true); //获取跟清晰的图像采样 
             paint.setFilterBitmap(true);//过滤一些 
            Rect bounds = new Rect(); 
            paint.getTextBounds(gText, 0, gText.length(), bounds);             
            int x = 30
            int y = 30;             
            canvas.drawText(gText, x * scale, y * scale, paint);                
            return bitmap; 
          }