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