国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 給圖片加上水印的示例代碼(支持logo+文字)

2019-12-12 02:21:07
字體:
來源:轉載
供稿:網友

本文介紹了Android 給圖片加上水印的示例代碼(支持logo+文字),分享給大家,具體如下:

現在我們想要往圖片上打上水印,該水印應符合這樣的需求的:

  1. 支持logo+文字;
  2. 文字信息支持多行展示;
  3. 用戶可以選擇水印在圖片上的生成位置(左上、右上、右下和左下)。

粗略的結構圖低配版大概就長這樣...

水印結構圖.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傳送門

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博爱县| 永嘉县| 清原| 皮山县| 若羌县| 黄平县| 上饶市| 东乡县| 百色市| 望江县| 洛扎县| 谢通门县| 吉安县| 枣阳市| 庐江县| 阿坝县| 盖州市| 兰州市| 收藏| 永丰县| 松潘县| 威宁| 烟台市| 长岭县| 桑植县| 文山县| 尼勒克县| 自治县| 沙雅县| 紫阳县| 彩票| 金平| 美姑县| 朝阳市| 涟水县| 会泽县| 涞水县| 霍山县| 宜黄县| 天长市| 霍林郭勒市|