ToB企服应用市场:ToB评测及商务社交产业平台

标题: 前端怎样实现水印功能 [打印本页]

作者: 王海鱼    时间: 2025-1-11 00:04
标题: 前端怎样实现水印功能
在前端开发中,给网页或图像添加水印是一项常见的需求。以下是几种实现水印的方法,包括其优缺点的解说:
1. 使用 CSS 背景图方式

通过将水印作为背景图片添加到网页的容器中。
实现步骤:
  1. .watermark-container {
  2.   position: relative;
  3. }
  4. .watermark-container::before {
  5.   content: "";
  6.   position: absolute;
  7.   top: 0;
  8.   left: 0;
  9.   width: 100%;
  10.   height: 100%;
  11.   background-image: url('watermark.png');
  12.   background-repeat: no-repeat;
  13.   background-position: center;
  14.   opacity: 0.2;
  15.   pointer-events: none; /* 确保水印不影响用户操作 */
  16. }
复制代码
优点:

缺点:

2. 使用 HTML5 Canvas 动态绘制水印

通过 Canvas 元素动态绘制水印,实用于图像或者页面上的任何元素。
实现步骤:
  1. <canvas id="watermarkCanvas"></canvas>
  2. <img id="targetImage" src="example.jpg" alt="Example Image" />
  3. <script>
  4.   const canvas = document.getElementById('watermarkCanvas');
  5.   const img = document.getElementById('targetImage');
  6.   
  7.   canvas.width = img.width;
  8.   canvas.height = img.height;
  9.   
  10.   const ctx = canvas.getContext('2d');
  11.   ctx.drawImage(img, 0, 0);
  12.   
  13.   // 设置水印样式
  14.   ctx.font = "30px Arial";
  15.   ctx.fillStyle = "rgba(255, 255, 255, 0.5)";
  16.   ctx.textAlign = "center";
  17.   ctx.textBaseline = "middle";
  18.   
  19.   // 在图像上绘制水印
  20.   ctx.fillText("Watermark", canvas.width / 2, canvas.height / 2);
  21. </script>
复制代码
优点:

缺点:

3. 使用 SVG 添加水印

通过使用 SVG 元素来实现水印,可以在矢量图形上显示水印,且水印可以缩放而不会失真。
实现步骤:
  1. <div class="watermark-container">
  2.   <img src="example.jpg" alt="Example Image">
  3.   <svg class="watermark" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
  4.     <text x="50%" y="50%" fill="rgba(255, 255, 255, 0.3)" font-size="40" text-anchor="middle" dominant-baseline="middle" transform="rotate(-30, 50, 50)">
  5.       Watermark
  6.     </text>
  7.   </svg>
  8. </div>
复制代码
优点:

缺点:

4. 使用图片处理库(如 Fabric.js)

借助 JavaScript 图像处理库,如Fabric.js,可以实现复杂的水印效果。
实现步骤:
  1. <canvas id="canvas"></canvas>
  2. <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.6.0/fabric.min.js"></script>
  3. <script>
  4.   const canvas = new fabric.Canvas('canvas');
  5.   
  6.   fabric.Image.fromURL('example.jpg', function(img) {
  7.     canvas.setWidth(img.width);
  8.     canvas.setHeight(img.height);
  9.     canvas.add(img);
  10.    
  11.     const watermark = new fabric.Text('Watermark', {
  12.       left: img.width / 2,
  13.       top: img.height / 2,
  14.       fontSize: 40,
  15.       fill: 'rgba(255, 255, 255, 0.5)',
  16.       angle: -30
  17.     });
  18.    
  19.     canvas.add(watermark);
  20.   });
  21. </script>
复制代码
优点:

缺点:


5. 使用 HTML DOM 元素实现水印

直接在页面上通过 DOM 元素叠加的方式实现水印。
实现步骤:
  1. <div class="watermark-container">
  2.   <img src="example.jpg" alt="Example Image">
  3.   <div class="watermark">Watermark</div>
  4. </div>
  5. <style>
  6. .watermark-container {
  7.   position: relative;
  8. }
  9. .watermark {
  10.   position: absolute;
  11.   top: 50%;
  12.   left: 50%;
  13.   transform: translate(-50%, -50%) rotate(-30deg);
  14.   font-size: 40px;
  15.   color: rgba(255, 255, 255, 0.5);
  16.   pointer-events: none;
  17. }
  18. </style>
复制代码
优点:

缺点:

6. 结合后端生成带水印的图像

前端通过哀求后端 API,由后端生成带水印的图片并返回到前端显示。
优点:

缺点:


结论


你可以根据具体的需求和性能思量,选择最得当的实现方式。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4