给图片添加水印的基本思路都是载入原图,添加文字或者载入水印图片,保存图片这三个部分
添加水印图片:
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; } |