所有分类
  • 所有分类
  • Html5资源
  • React资源
  • Vue资源
  • Php资源
  • ‌小程序资源
  • Python资源

React页面水印效果的实现简直不要太so easy

简介

水印是一种在页面内容上叠加半透明文字或图片的技术,通常用于标识页面来源、版权保护或防止内容被恶意复制。在 Web 开发中,水印可以动态生成并覆盖在页面的各个元素上。

水印的作用

1. 版权保护

  • 在重要文档、图片或页面内容上添加版权信息
  • 防止内容被未经授权使用或传播
  • 明确标识内容的所有权

2. 品牌宣传

  • 在页面中展示公司 logo 或品牌名称
  • 提升品牌知名度和识别度
  • 增强用户对品牌的记忆

3. 安全防护

  • 防止页面内容被截图后恶意使用
  • 在敏感信息页面添加用户标识
  • 追踪内容泄露的来源

4. 状态标识

  • 标识页面的状态(如”草稿”、”预览”等)
  • 显示用户权限级别
  • 标记页面版本信息

示例

canvas 实现

import React, { useEffect, useState } from "react";

export default function Watermark({
  text = "hello Watermark", // 水印文字
  font = "16px Microsoft YaHei", // 字体
  color = "rgba(0,0,0,0.15)", // 水印颜色
  rotate = -20, // 旋转角度
  gapX = 80, // 水平间距
  gapY = 60, // 垂直间距
}) {
  const [watermarkUrl, setWatermarkUrl] = useState("");

  useEffect(() => {
    // 创建canvas生成水印图片
    const canvas = document.createElement("canvas");
    const ctx = canvas.getContext("2d");
    // 计算canvas宽高 = 文字宽高 + 间距
    const width = 160 + gapX;
    const height = 60 + gapY;
    canvas.width = width;
    canvas.height = height;
    ctx.clearRect(0, 0, width, height);
    ctx.save();
    ctx.translate(width / 2, height / 2);
    ctx.rotate((Math.PI / 180) * rotate);
    ctx.font = font;
    ctx.fillStyle = color;
    ctx.textAlign = "center";
    ctx.textBaseline = "middle";
    ctx.fillText(text, 0, 0);
    ctx.restore();
    setWatermarkUrl(canvas.toDataURL());
  }, [text, font, color, rotate, gapX, gapY]);

  return (
    <div
      style={{
        position: "fixed",
        left: 0,
        top: 0,
        width: "100vw",
        height: "100vh",
        zIndex: 9999,
        pointerEvents: "none",
        backgroundImage: `url(${watermarkUrl})`,
        backgroundRepeat: "repeat",
        opacity: 1,
      }}
    />
  );
}

@pansy/watermark 库实现

import React, { useEffect } from "react";
import { Watermark } from "@pansy/watermark";

const App = () => {
  useEffect(() => {
    const watermark = new Watermark({
      text: "Hello Watermark", // 水印文字
      fontSize: 16, // 水印字体大小
      fontColor: "#000", // 水印字体颜色
      fontWeight: "bold", // 水印字体粗细
      fontFamily: "Arial", // 水印字体
      fontStyle: "italic", // 水印字体样式
      fontVariant: "small-caps", // 水印字体变体
    });

    return () => {
      watermark.destroy();
    };
  }, []);

  return <div className="p-10 min-h-screen"></div>;
};

export default App;

参数说明

参数名类型默认值
textstring水印文字
fontSizenumber16水印字体大小
fontColorstring#000水印字体颜色
fontWeightstringnormal水印字体粗细
fontFamilystringArial水印字体
fontStylestringnormal水印字体样式
fontVariantstringnormal水印字体变体
gapXnumber100水印水平间距
gapYnumber100水印垂直间距
offsetLeftnumber0水印水平偏移量
offsetTopnumber0水印垂直偏移量
widthnumber200水印宽度
heightnumber200水印高度
opacitynumber0.15水印透明度
rotatenumber45水印旋转角度
monitorbooleanfalse是否开启监视模式
imagestring水印图片地址
blindTextbooleanfalse是否开启盲水印
blindFontSizenumber16盲水印字体大小
blindOpacitynumber0.15盲水印透明度
zIndexnumber水印层级
packbooleanfalse是否使用水印组件包裹内容
containerHTMLElement,string,null水印容器选择器
containerStyleobject水印容器样式
modestring‘repeat’ ‘interval’水印容器的定位方式

watermarkjs 图片水印实现

给图片添加水印,需要传入图片地址,水印会自动根据图片大小进行缩放,并自动添加到图片上。这并非给整个页面加水印。

import React, { useEffect, useRef } from "react";
import watermark from "watermarkjs";

const WatermarkText = () => {
  const containerRef = useRef(null);

  useEffect(() => {
    // watermarkjs 文字水印用法
    watermark(["/public/nature-1.jpg"])
      .image(
        watermark.text.lowerRight(
          "hello watermark",
          "24px Arial",
          "rgba(0,0,0,0.5)"
        )
      )
      .then((img) => {
        if (containerRef.current) {
          containerRef.current.innerHTML = "";
          containerRef.current.appendChild(img);
        }
      });
  }, []);

  return (
    <div>
      <div ref={containerRef}></div>
    </div>
  );
};

export default WatermarkText;
资源下载
下载价格免费
注意:本网站资源属于虚拟产品,不支持退款。请谨慎购买! 购买后资源无法下载,请联系客服QQ:844475003,微信号:th844475003。
原文链接:https://code.ifrontend.net/archives/643,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?