您好,登錄后才能下訂單哦!
本文介紹了Android 給圖片加上水印的示例代碼(支持logo+文字),分享給大家,具體如下:
現在我們想要往圖片上打上水印,該水印應符合這樣的需求的:
粗略的結構圖低配版大概就長這樣...
水印結構圖.png
現在提供這樣的一種思路去實現這一個需求,我們可以通過自定義一個view,view的布局中包含logo、公司名稱和相關信息,這個view就是我們要打上圖片的水印。
這樣的一個view其實是一個自定義組合布局,關于如何實現組合布局的自定義view,可以參考這篇文章:Android 自定義View實踐之組合控件實現布局的復用
有了水印的view之后,我們就可以利用以下這個方法,得到水印的view的Bitmap。
/** * 將一個view轉換為Bitmap * @param view * @return */ public static Bitmap convertViewToBitmap(View view){ view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap; }
得到水印的view的Bitmap之后,處理一下尺寸,保持水印的尺寸在合理范圍內。
//根據原圖處理要生成的水印的寬高 float width = sourBitmap.getWidth(); float height = sourBitmap.getHeight(); float be = width / height; if ((float) 16 / 9 >= be && be >= (float) 4 / 3) { //在圖片比例區間內16;9~4:3內,將生成的水印bitmap設置為原圖寬高各自的1/5 waterBitmap = WaterMaskUtil.zoomBitmap(waterBitmap, (int) width / 5, (int) height / 5); } else if (be > (float) 16 / 9) { //生成4:3的水印 waterBitmap = WaterMaskUtil.zoomBitmap(waterBitmap, (int) width / 5, (int) width*3 / 20); } else if (be < (float) 4 / 3) { //生成4:3的水印 waterBitmap = WaterMaskUtil.zoomBitmap(waterBitmap, (int) height*4 / 15, (int) height / 5); }
然后將它按照要求繪制在原圖上,提供生成左上、右上、右下和左下四個位置的水印各自的方法,關鍵代碼如下:
/** * 設置水印圖片在左上角 * @param src * @param watermark * @param paddingLeft * @param paddingTop * @return */ public static Bitmap createWaterMaskLeftTop( Context context, Bitmap src, Bitmap watermark, int paddingLeft, int paddingTop) { return createWaterMaskBitmap(src, watermark, dp2px(context, paddingLeft), dp2px(context, paddingTop)); } /** * 設置水印圖片在右下角 * @param src * @param watermark * @param paddingRight * @param paddingBottom * @return */ public static Bitmap createWaterMaskRightBottom( Context context, Bitmap src, Bitmap watermark, int paddingRight, int paddingBottom) { return createWaterMaskBitmap(src, watermark, src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight), src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom)); } /** * 設置水印圖片到右上角 * @param src * @param watermark * @param paddingRight * @param paddingTop * @return */ public static Bitmap createWaterMaskRightTop( Context context, Bitmap src, Bitmap watermark, int paddingRight, int paddingTop) { return createWaterMaskBitmap( src, watermark, src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight), dp2px(context, paddingTop)); } /** * 設置水印圖片到左下角 * @param src * @param watermark * @param paddingLeft * @param paddingBottom * @return */ public static Bitmap createWaterMaskLeftBottom( Context context, Bitmap src, Bitmap watermark, int paddingLeft, int paddingBottom) { return createWaterMaskBitmap(src, watermark, dp2px(context, paddingLeft), src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom)); } /** * 繪制水印圖片 * @param src 原圖 * @param watermark 水印 * @param paddingLeft * @param paddingTop * @return */ private static Bitmap createWaterMaskBitmap(Bitmap src, Bitmap watermark, int paddingLeft, int paddingTop) { if (src == null) { return null; } int width = src.getWidth(); int height = src.getHeight(); //創建一個bitmap Bitmap newb = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 創建一個新的和SRC長度寬度一樣的位圖 //將該圖片作為畫布 Canvas canvas = new Canvas(newb); //在畫布 0,0坐標上開始繪制原始圖片 canvas.drawBitmap(src, 0, 0, null); //在畫布上繪制水印圖片 canvas.drawBitmap(watermark, paddingLeft, paddingTop, null); // 保存 canvas.save(Canvas.ALL_SAVE_FLAG); // 存儲 canvas.restore(); return newb; }
繪制后的效果應該是這樣的,歡迎拍磚~
給圖片加上水印.png
附上源代碼:github傳送門
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。