写了一个给网页添加水印的库 - V2EX
爱意满满的作品展示区。
unsized

写了一个给网页添加水印的库

  •  
  •   unsized
    YanxinTang May 7, 2019 4972 views
    This topic created in 2567 days ago, the information mentioned may be changed or developed.

    Github

    Demo

    介绍

    Watermark 是一款方便快捷的给网页添加水印的库。目前可以设置的内容有:文本内容,文字颜色,字体,字体大小,旋转角度,行高。

    原理

    将设置好的文字,按照设置的样式绘制在 canvas 上面,利用.toDataURL()这个方法把 canvas 转成 base64,最后在 css 中设置其作为背景

    最后

    第一次写 js 的库,不知道什么地方需要注意,还请各位不吝赐教~

    13 replies    2019-05-09 14:56:07 +08:00
    xiaoxiuaoliang
        1
    xiaoxiuaoliang  
       May 7, 2019 via Android   1
    提个建议,支持水印置于顶层放置。因为有些场景下水印需要总是显示,不能被元素的背景颜色覆盖。
    unsized
        2
    unsized  
    OP
       May 7, 2019
    感谢,不过其实这种情况下可以把遮挡元素增加一点背景透明度,就不会造成完全覆盖了。
    @xiaoxiuaoliang
    paranoiagu
        3
    paranoiagu  
       May 8, 2019 via Android   1
    收了,有用。另外,1 楼说的有道理,水印置于顶层,设置半透明。
    unsized
        4
    unsized  
    OP
       May 8, 2019 via iPhone
    @paranoiagu 嗯好的。我想一下如何实现
    unizheng
        5
    unizheng  
       May 8, 2019
    建议增加一些防护机制,防止水印被简单的关闭、篡改(比如删除 style 属性,修改值等)。
    unsized
        6
    unsized  
    OP
       May 8, 2019
    @unizheng 现在有的,通过 MutationObserver 监测 background 属性变化
    wly19960911
        7
    wly19960911  
       May 8, 2019   1
    background style 加个 !important,防止被 css 优先级覆盖。
    zxq2233
        8
    zxq2233  
       May 8, 2019   1
    dispay:none
    解决一切
    unsized
        9
    unsized  
    OP
       May 8, 2019
    @wly19960911 嗯嗯,有道理


    @zxq2233 哈哈,display:none; 都没有内容了,也就不需要水印了
    xibidix
        10
    xibidix  
       May 9, 2019 via iPhone   1
    不错哈
    unsized
        11
    unsized  
    OP
       May 9, 2019
    @xibidix 感谢
    jinzhe
        12
    jinzhe  
       May 9, 2019
    ```js
    var canvas = document.createElement("canvas");
    canvas.width = 600;
    canvas.height = 600;
    var ctx = canvas.getContext("2d");
    ctx.rotate((-25 * Math.PI) / 180);
    ctx.fillStyle = "rgba(100,100,100,.4)";
    ctx.textAlign = "center";
    ctx.fOnt= "40px Airal";
    ctx.fillText("https://zee.kim", 600 / 3, 600 / 2);
    // ctx.rotate((20 * Math.PI) / 180); //坐标系还原
    console.log(canvas.toDataURL("image/png"));
    ```

    之前做在线打印奖状做过类似效果
    unsized
        13
    unsized  
    OP
       May 9, 2019
    @jinzhe 嗯,原理差不多。我这个加了画布的大小根据里面内容大小自适应的功能来满足自定义的需求
    About     Help     Advertise     Blog     API     FAQ     Solana     914 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 22:35 PVG 06:35 LAX 15:35 JFK 18:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86