ホームページ  >  記事  >  ウェブフロントエンド  >  WebウォーターマークSDKの実装方法の紹介(コード例)

WebウォーターマークSDKの実装方法の紹介(コード例)

不言
不言転載
2019-02-19 15:55:282177ブラウズ

この記事では、Web ウォーターマーク SDK の実装方法 (コード例) を紹介します。必要な方は参考にしてください。

Web サイトを閲覧する場合、スクリーンショットや画面録画を撮って機密情報が漏洩した後にユーザーがソースを追跡できないようにするために、Web ページの透かしが必要になることがよくあります。たとえば、一般的に使用されている DingTalk ソフトウェアでは、チャットの背景にあなたの名前が表示されます。では、Web 透かし効果を実現するにはどうすればよいでしょうか?

Web ページのウォーターマーク SDK、実装アイデア

1. 名前、ニックネーム、ID など、取得した現在のユーザー情報に基づいてウォーターマークを生成できます。 #2 . ウィンドウ全体をカバーし、他の要素に影響を与えないキャンバスを生成します。
3. フォントの間隔、サイズ、色を変更できます。
4. ユーザーがアクセスできないようにする必要はありません。このキャンバスを手動で削除します

実装分析

初期パラメータ

    size: 字体大小
    color: 字体颜色
    id: canvasId
    text: 文本内容
    density: 间距
    clarity: 清晰度
    supportTip: Canvas不支持的文字提示
キャンバスの生成

キャンバス ベースの生成ID でキャンバスのサイズがウィンドウのサイズになっている場合は、古いキャンバスがある場合はそれをクリアして再生成します。

キャンバスはビジュアル ウィンドウ内で固定的に配置され、z インデックスは -1です

    let body = document.getElementsByTagName('body');
    let canvas = document.createElement('canvas');
    canvas.style.cssText= 'position: fixed;width: 100%;height: 100%;left:0;top:0;z-index: -1;';
    body[0].appendChild(canvas);

フィンガープリント生成アルゴリズム

      let canvas = document.getElementById(this.params.id);
      let cxt = canvas.getContext('2d');
      let times = window.screen.width * this.params.clarity / this.params.density;//横向文字填充次数
      let heightTimes = window.screen.height * this.params.clarity * 1.5/ this.params.density; //纵向文字填充次数
      cxt.rotate(-15*Math.PI/180); //倾斜画布
   
      for(let i = 0; i < times; i++) {
        for(let j = 0; j < heightTimes; j++) {
          cxt.fillStyle = this.params.color;
          cxt.font = this.params.size + ' Arial';
          cxt.fillText(this.params.text, this.params.density*i, j*this.params.density);
        }
      }

ユーザーの削除を防止します

タイマーを使用し、フィンガープリントが存在するかどうかを定期的に確認します

    let self = this;
    window.setInterval(function(){
    if (!document.getElementById(self.params.id)) {
    self._init();
    }
    }, 1000);

プロジェクトのコンパイル

glupを使用してコンパイル

    var gulp = require('gulp'),
        uglify = require("gulp-uglify"),
        babel = require("gulp-babel");
    gulp.task('minify', function () {
        return gulp.src('./src/index.js') // 要压缩的js文件
        .pipe(babel())
        .pipe(uglify())
        .pipe(gulp.dest('./dist')); //压缩后的路径
    });

以上がWebウォーターマークSDKの実装方法の紹介(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。