最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年08月01日 16:48:28   作者:echoMu_  
本篇文章主要介紹了Android 給圖片加上水印的示例代碼(支持logo+文字),具有一定的參考價(jià)值,有興趣的可以了解一下

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

現(xiàn)在我們想要往圖片上打上水印,該水印應(yīng)符合這樣的需求的:

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

粗略的結(jié)構(gòu)圖低配版大概就長(zhǎng)這樣...

水印結(jié)構(gòu)圖.png

現(xiàn)在提供這樣的一種思路去實(shí)現(xiàn)這一個(gè)需求,我們可以通過自定義一個(gè)view,view的布局中包含logo、公司名稱和相關(guān)信息,這個(gè)view就是我們要打上圖片的水印。

這樣的一個(gè)view其實(shí)是一個(gè)自定義組合布局,關(guān)于如何實(shí)現(xiàn)組合布局的自定義view,可以參考這篇文章:Android 自定義View實(shí)踐之組合控件實(shí)現(xiàn)布局的復(fù)用

有了水印的view之后,我們就可以利用以下這個(gè)方法,得到水印的view的Bitmap。

/**
 * 將一個(gè)view轉(zhuǎn)換為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之后,處理一下尺寸,保持水印的尺寸在合理范圍內(nèi)。

//根據(jù)原圖處理要生成的水印的寬高
  float width = sourBitmap.getWidth();
  float height = sourBitmap.getHeight();
  float be = width / height;

  if ((float) 16 / 9 >= be && be >= (float) 4 / 3) {
    //在圖片比例區(qū)間內(nèi)16;9~4:3內(nèi),將生成的水印bitmap設(shè)置為原圖寬高各自的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);
  }

然后將它按照要求繪制在原圖上,提供生成左上、右上、右下和左下四個(gè)位置的水印各自的方法,關(guān)鍵代碼如下:

/**
 * 設(shè)置水印圖片在左上角
 * @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));
}

/**
 * 設(shè)置水印圖片在右下角
 * @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));
}

/**
 * 設(shè)置水印圖片到右上角
 * @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));
}

/**
 * 設(shè)置水印圖片到左下角
 * @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();
  //創(chuàng)建一個(gè)bitmap
  Bitmap newb = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 創(chuàng)建一個(gè)新的和SRC長(zhǎng)度寬度一樣的位圖
  //將該圖片作為畫布
  Canvas canvas = new Canvas(newb);
  //在畫布 0,0坐標(biāo)上開始繪制原始圖片
  canvas.drawBitmap(src, 0, 0, null);
  //在畫布上繪制水印圖片
  canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);
  // 保存
  canvas.save(Canvas.ALL_SAVE_FLAG);
  // 存儲(chǔ)
  canvas.restore();
  return newb;
}

繪制后的效果應(yīng)該是這樣的,歡迎拍磚~

給圖片加上水印.png

附上源代碼:github傳送門

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android Drawable及其相關(guān)類的使用

    Android Drawable及其相關(guān)類的使用

    本文主要講解Android Drawable,這里整理了Drawable 的文檔資料和實(shí)例代碼以及實(shí)現(xiàn)效果圖,有需要的小伙伴可以參考下
    2016-08-08
  • Flutter?Animation實(shí)現(xiàn)縮放和滑動(dòng)動(dòng)畫效果

    Flutter?Animation實(shí)現(xiàn)縮放和滑動(dòng)動(dòng)畫效果

    這篇文章主要為大家詳細(xì)介紹了Flutter?Animation實(shí)現(xiàn)縮放和滑動(dòng)動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Android字體相關(guān)知識(shí)總結(jié)

    Android字體相關(guān)知識(shí)總結(jié)

    最近接到一個(gè)需求,大致內(nèi)容是:全局替換當(dāng)前項(xiàng)目中的默認(rèn)字體,并引入 UI 設(shè)計(jì)師提供的一些新字體。于是對(duì)字體做了些研究,把自己的一些心得分享給大家。注意:本文所展示的系統(tǒng)源碼都是基于Android-30 ,并提取核心部分進(jìn)行分析
    2021-06-06
  • Android中ConstraintLayout約束布局的最全詳細(xì)解析

    Android中ConstraintLayout約束布局的最全詳細(xì)解析

    ConstraintLayout是Google在Google?I/O?2016大會(huì)上發(fā)布的一種新的布局容器(ViewGroup),它支持以靈活的方式來放置子控件和調(diào)整子控件的大小,下面這篇文章主要給大家介紹了關(guān)于Android中ConstraintLayout約束布局詳細(xì)解析的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Android調(diào)用google地圖生成路線圖實(shí)現(xiàn)代碼

    Android調(diào)用google地圖生成路線圖實(shí)現(xiàn)代碼

    Android程序調(diào)用本機(jī)google地圖并且傳遞起始和終點(diǎn)位置生成路線圖,有需要的朋有可以參考下,或許本文對(duì)你有所幫助,好了話不多說,看代碼
    2013-02-02
  • Android ProgressBar實(shí)現(xiàn)進(jìn)度條效果

    Android ProgressBar實(shí)現(xiàn)進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了Android ProgressBar實(shí)現(xiàn)進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Repo工作原理和使用介紹

    Repo工作原理和使用介紹

    Repo是谷歌用Python腳本寫的調(diào)用git的一個(gè)腳本,可以實(shí)現(xiàn)管理多個(gè)git庫(kù)。本文詳細(xì)講解了Repo的工作原理和使用介紹,需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-12-12
  • Android開發(fā)筆記之圖片緩存、手勢(shì)及OOM分析

    Android開發(fā)筆記之圖片緩存、手勢(shì)及OOM分析

    這篇文章主要介紹了Android開發(fā)筆記之圖片緩存、手勢(shì)及OOM分析 的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Android啟動(dòng)屏實(shí)現(xiàn)左右滑動(dòng)切換查看功能

    Android啟動(dòng)屏實(shí)現(xiàn)左右滑動(dòng)切換查看功能

    這篇文章主要介紹了Android啟動(dòng)屏實(shí)現(xiàn)左右滑動(dòng)切換查看功能的相關(guān)資料,針對(duì)新功能屬性介紹和啟動(dòng)屏進(jìn)行詳細(xì)講解,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Android中AnimationDrawable使用的簡(jiǎn)單實(shí)例

    Android中AnimationDrawable使用的簡(jiǎn)單實(shí)例

    這篇文章介紹了Android中AnimationDrawable使用的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下
    2013-10-10

最新評(píng)論

三原县| 平利县| 黔西| 杭锦旗| 静宁县| 建瓯市| 德江县| 富宁县| 宁安市| 榆社县| 麻江县| 民乐县| 洛宁县| 咸宁市| 上林县| 祁阳县| 宽城| 岑溪市| 安仁县| 梅州市| 内江市| 永城市| 龙泉市| 江山市| 天祝| 万盛区| 刚察县| 福清市| 霸州市| 龙口市| 和田市| 闽清县| 洛宁县| 大名县| 共和县| 云和县| 宽甸| 宜君县| 宁晋县| 讷河市| 兴山县|