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

首頁 > 系統 > Android > 正文

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

2019-10-22 18:31:10
字體:
來源:轉載
供稿:網友

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

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

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

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

Android,圖片加水印,給圖片加水印

水印結構圖.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;}

繪制后的效果應該是這樣的,歡迎拍磚~

Android,圖片加水印,給圖片加水印

給圖片加上水印.png

附上源代碼:github傳送門

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂伦春自治旗| 苏尼特右旗| 广南县| 库车县| 东辽县| 龙泉市| 张家界市| 海丰县| 曲松县| 舞阳县| 嘉黎县| 芜湖县| 武川县| 克什克腾旗| 长寿区| 南京市| 高淳县| 荃湾区| 宜君县| 上虞市| 高雄县| 永年县| 安塞县| 崇仁县| 新源县| 上栗县| 大姚县| 博野县| 女性| 兴化市| 胶南市| 安平县| 亚东县| 天全县| 义马市| 宁陕县| 于田县| 金山区| 大庆市| 铅山县| 河曲县|