中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-27 20:15:57 來源:腳本之家 閱讀:575 作者:echoMu_ 欄目:移動開發

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

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

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

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

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;
}

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

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

給圖片加上水印.png

附上源代碼:github傳送門

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

峨山| 西乡县| 勃利县| 上林县| 蕉岭县| 赣榆县| 莱芜市| 盐津县| 湖口县| 马尔康县| 巢湖市| 筠连县| 漾濞| 台中县| 齐齐哈尔市| 泾源县| 禹城市| 金堂县| 乌恰县| 伊宁县| 庆阳市| 香格里拉县| 巨鹿县| 抚宁县| 西乌珠穆沁旗| 兴文县| 新密市| 龙川县| 奉新县| 黄骅市| 田阳县| 隆安县| 梅河口市| 格尔木市| 临邑县| 都安| 稻城县| 大同县| 莱州市| 绿春县| 泰顺县|