給圖片添加水印的基本思路都是載入原圖,添加文字或者載入水印圖片,保存圖片這三個部分
添加水印圖片:
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;
}
|