Android 解決小米手機添加圖片水印後顯示黑邊的問題

語言: CN / TW / HK

背景

  • 由於選擇圖片後需要需要在圖片上添加logo,經緯度座標,天氣、時間等內容(圖片水印)

  • 測試反饋在小米手機上選擇圖片上傳後有圖片在右邊和下邊有一條黑邊 具體查看下圖

    小米黑邊圖

  • 調用代碼如下使用O、V、H、及榮耀手機驗證,並沒有這個現象,應該是小米魔改系統鍋了

/**   * 繪製水印圖片   *   * @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();      //創建一個新的和SRC長度寬度一樣的位圖      Bitmap newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);      //將該圖片作為畫布      Canvas canvas = new Canvas(newBitmap);      //在畫布 0,0座標上開始繪製原始圖片      canvas.drawBitmap(src, 0, 0, null);      //在畫布上繪製水印圖片      canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);      // 保存      canvas.save();      // 存儲      canvas.restore();      return newBitmap;  }

  • 雖然是小米的鍋,但是問題還是要解決的,不然就是多個bug少塊錢了😭,這個黑邊的寬度看着有點像StatusBarHeight,

  • 那就把圖片中的黑邊給減掉,然後用Bitmap的寬度減去statusBar高度,上傳保存之後和原圖做比較,發現寬高都被多裁切了尺寸

    LogUtils.iTag("狀態欄和,導航欄高度->",BarUtils.getStatusBarHeight(),","+BarUtils.getNavBarHeight());  if (RomUtils.isXiaomi()) {      //LogUtils.iTag("狀態欄和,導航欄高度->",BarUtils.getStatusBarHeight(),","+BarUtils.getNavBarHeight());      width = width - BarUtils.getStatusBarHeight();      height = height - BarUtils.getStatusBarHeight();  }

不盡如意解決方案 ,總歸是解決了,不是遺留bug😁

遺憾的是沒有找到獲取這個黑邊寬度和高度的方法

/**       * 繪製水印圖片       *       * @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();  ​          //解決小米手機繪製有黑邊的問題          if (RomUtils.isXiaomi()) {              //LogUtils.iTag("狀態欄和,導航欄高度->",BarUtils.getStatusBarHeight(),","+BarUtils.getNavBarHeight());              width = width - 25;              height = height - 30;         }  ​          //創建一個新的和SRC長度寬度一樣的位圖          Bitmap newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);          //將該圖片作為畫布          Canvas canvas = new Canvas(newBitmap);          //在畫布 0,0座標上開始繪製原始圖片          canvas.drawBitmap(src, 0, 0, null);          //在畫布上繪製水印圖片          canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);          // 保存          canvas.save();          // 存儲          canvas.restore();          return newBitmap;     }  ​

修復後的圖片

已修復圖片


\