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

首頁 > 開發 > HTML5 > 正文

前端canvas水印快速制作(附完整代碼)

2024-09-05 07:19:30
字體:
來源:轉載
供稿:網友

兩種水印效果如圖:

原理解析:

  • 圖一斜紋類:創建一個和頁面一樣大的畫布,根據頁面大小以及傾斜角度大致鋪滿水印文字,最后轉化為一張圖片設為背景
  • 圖二傾斜類:將文字傾斜后轉化為圖片,然后設置背景圖片repeat填充整個頁面

代碼分析:

這里我只簡略分析圖一斜紋類,事實上這兩種方式都較為簡單,不需要特別強的canvas基礎,只需大概了解就行,直接上完整代碼吧

圖一

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <meta http-equiv="X-UA-Compatible" content="ie=edge">  <title>Document</title>  <style>    .water {      width: 100vw;      height: 2000px;      position: absolute;      top: 0;      left: 0;      background-repeat: no-repeat;    }    .content {      width: 800px;      height: 2000px;      margin-left: auto;      margin-right: auto;      background: cadetblue;      overflow: hidden;          }  </style>  <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script></head><body>  <div class="content">    <div class="water"></div>  </div>    <script>    function addWaterMarker(str) {      // 這里限制了不超過15個字,實際按需求來      var cpyName = str;      if (str.length > 16) {        cpyName = str.substring(0, 16);      }      // 創建 canvas 元素      var can = document.createElement('canvas');      // 獲取 content 元素      var report = $('.content')[0]      // 將 canvas 元素添加到 content 中      report.appendChild(can);      // 設置 canvas頁面寬度,這里的 800 是因為我司水印文件大小固定,可按需求更改      can.width = 800;      // 獲取整個body高度      can.height = document.body.offsetHeight;      // 隱藏 canvas 元素      can.style.display = 'none';      can.style.zIndex = '999'      // 獲取 canvas 元素工具箱      var cans = can.getContext('2d');      // 設置文字傾斜角度為 -25 度以及樣式      cans.rotate(-25 * Math.PI / 180);      cans.font = "800 30px Microsoft JhengHei";      cans.fillStyle = "#000";      cans.textAlign = 'center';      cans.textBaseline = 'Middle';      // 動態改變字體大小      if(cans.measureText(cpyName).width > 180) {        var size = 180 / cpyName.length        cans.font = '800 ' + size +'px '+ ' Microsoft JhengHei'      }      /*         雙重遍歷,        當 寬度小于頁面寬度時,        當 高度小于頁面高度時,        這里的寬高可以適當寫大,目的是為了讓水印文字鋪滿       */      for(let i = (document.body.offsetHeight*0.5)*-1; i<800; i+=160) {        for(let j = 0; j<document.body.offsetHeight*1.5; j+=60) {          // 填充文字,x 間距, y 間距          cans.fillText(cpyName, i, j)        }      }      // 將 canvas 轉化為圖片并且設置為背景      report.style.backgroundImage = "url(" + can.toDataURL("image/png") + ")";    }    addWaterMarker('測試水印');  </script></body></html>

圖二

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <meta http-equiv="X-UA-Compatible" content="ie=edge">  <title>Document</title>  <style>    .water {      width: 100vw;      height: 2000px;      position: absolute;      top: 0;      left: 0;      background-repeat: no-repeat;    }    .content {      width: 800px;      height: 2000px;      margin-left: auto;      margin-right: auto;      background: cadetblue;      overflow: hidden;    }  </style></head><body>    <div class="content">      <div class="water"></div>    </div>  <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>  <script>    // 添加水印方法    function addWaterMarker(str) {      var cpyName = str;      if (str.length > 16) {        cpyName = str.substring(0, 16);      }      var can = document.createElement('canvas');      var report = $('.content')[0];      report.appendChild(can);      can.width = 180;      can.height = 110;      can.style.display = 'none';      can.style.zIndex = '999'      var cans = can.getContext('2d');      cans.rotate(-25 * Math.PI / 180);      cans.font = "800 30px Microsoft JhengHei";      cans.fillStyle = "#000";      cans.textAlign = 'center';      cans.textBaseline = 'Middle';      if(cans.measureText(cpyName).width > 180) {        var size = 180 / cpyName.length        cans.font = '800 ' + size +'px '+ ' Microsoft JhengHei'      }      cans.fillText(cpyName, 60, 100);      report.style.backgroundImage = "url(" + can.toDataURL("image/png") + ")";    }    addWaterMarker('測試水印');  </script></body></html>

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通道| 清水河县| 巨鹿县| 云龙县| 泾源县| 辽阳市| 玉田县| 洪雅县| 抚松县| 千阳县| 湾仔区| 门源| 烟台市| 福清市| 青岛市| 睢宁县| 永年县| 黔江区| 南阳市| 上饶县| 陵水| 顺义区| 安仁县| 云和县| 凤山县| 财经| 磐石市| 镇巴县| 洛南县| 呼伦贝尔市| 上蔡县| 南江县| 东海县| 万年县| 白沙| 乐都县| 二手房| 新邵县| 河曲县| 伊宁市| 时尚|