最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中使用帶隱藏文本信息的圖片、圖片水印的方法

 更新時間:2020年04月24日 08:36:14   作者:游戲人生,人生如戲  
這篇文章主要介紹了vue中使用帶隱藏文本信息的圖片、圖片水印的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一.帶隱藏文本信息的圖片

通過RGB 分量值的小量變動,不影響對圖片的識別。因此,我們可以在圖片加入文字信息。

最終達到如下效果:

首先,在該組件中加入img用于顯示圖片

<canvas ref="canvas" v-show="0"></canvas>
<img :src="imageUrl" v-if="imageUrl"/>

調用方法

encryptionImg({
    width = '',
    height = '',
    content = '',
   }){
    let img = this.img
    const imgRatio = img.naturalWidth / img.naturalHeight;
    const ctxWidth = width || img.naturalWidth;
    const ctxHeight = height || ctxWidth / imgRatio;
    this.canvas.width = ctxWidth;
    this.canvas.height = ctxHeight;
    const ctx = this.ctx;
    ctx.font = '16px Microsoft Yahei';
    ctx.textAlign = 'left';
    ctx.textBaseline = 'top';
    ctx.fillText(content, 12, ctxHeight/2, ctxWidth);17     const textData = ctx.getImageData(0, 0, ctxWidth, ctxHeight);
    this.imageUrl = this.mergeData(textData.data, 'R',ctxWidth,ctxHeight);19    }

把文字和圖片整合成一張圖

mergeData(newData, color, width, height) {
    let img = this.img
    this.ctx.drawImage(img, 0, 0, width, height);
    this.originalData = this.ctx.getImageData(0, 0, width, height);
    var oData = this.originalData.data;
    var bit, offset;
    switch (color) {
     case 'R':
      bit = 0;
      offset = 3;
      break;
     case 'G':
      bit = 1;
      offset = 2;
      break;
     case 'B':
      bit = 2;
      offset = 1;
      break;
    }
    for (var i = 0; i < oData.length; i++) {
     if (i % 4 == bit) {
      if (newData[i + offset] === 0 && (oData[i] % 2 === 1)) {
       if (oData[i] === 255) {
        oData[i]--
       } else {
        oData[i]++
       }
      } else if (newData[i + offset] !== 0 && (oData[i] % 2 === 0)) {
       if (oData[i] === 255) {
        oData[i]--
       } else {
        oData[i]++
       }
      }
     }
    }
    this.ctx.putImageData(this.originalData, 0, 0);
    return this.canvas.toDataURL();
   },

調用下面方法,解開圖片信息

decryptImg(){
    var data = this.originalData.data;
    for(var i = 0; i < data.length; i++){
     if(i % 4 == 0){
      if(data[i] % 2 == 0){
       data[i] = 0;
      } else {
       data[i] = 255;
      }
     } else if(i % 4 == 3){
      continue;
     } else {
      data[i] = 0;
     }
    }
    this.ctx.putImageData(this.originalData, 0, 0);
    this.imageUrl = this.canvas.toDataURL();
   },

二.圖片水印

watermark({
    content = '',
    container = '',
    width = '',
    height = '',
    position = 'bottom-right',
    font = '16px 微軟雅黑',
    fillStyle = 'rgba(255, 255, 255, 1)',
    zIndex = 11000,
   } = {}) {
    let img = this.img
    const imgRatio = img.naturalWidth / img.naturalHeight;
    const ctxWidth = width || img.naturalWidth;
    const ctxHeight = height || ctxWidth / imgRatio;
    this.canvas.width = ctxWidth;
    this.canvas.height = ctxHeight;
    const ctx = this.ctx;
    ctx.drawImage(img, 0, 0, ctxWidth, ctxHeight);
    ctx.shadowColor = 'rgba(0, 0, 0, 0.2)';
    ctx.shadowOffsetX = 2;
    ctx.shadowOffsetY = 2;
    ctx.shadowBlur = 2;
    ctx.font = font;
    ctx.fillStyle = fillStyle;
    if(position == 'center') {
     ctx.textAlign = 'center';
     ctx.textBaseline = 'middle';
     ctx.fillText(content, ctxWidth / 2, ctxHeight / 2, ctxWidth)
    }else if(position == 'bottom-right') {
     ctx.textAlign = 'right';
     ctx.textBaseline = 'alphabetic';
     ctx.fillText(content, ctxWidth-12, ctxHeight-12, ctxWidth)
    }
    const base64Url = this.canvas.toDataURL();
    if(container) {
     const div = document.createElement('div');
     div.setAttribute('style', ` width: ${ctxWidth}px; height: ${ctxHeight}px; z-index: ${zIndex}; 
     pointer-events: none; background-repeat: repeat; background-image: url('${base64Url}')`);
     container.insertBefore(div, null);
    }
    this.imageUrl = base64Url
   }

參考

http://www.alloyteam.com/2016/03/image-steganography/

到此這篇關于vue中使用帶隱藏文本信息的圖片、圖片水印的文章就介紹到這了,更多相關vue 隱藏文本信息圖片水印內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue封裝動態(tài)表格方式詳解

    vue封裝動態(tài)表格方式詳解

    這篇文章主要為大家介紹了vue封裝動態(tài)表格方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • vue如何修改data中的obj數(shù)據(jù)的屬性

    vue如何修改data中的obj數(shù)據(jù)的屬性

    這篇文章主要介紹了vue如何修改data中的obj數(shù)據(jù)的屬性,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue實現(xiàn)頁面添加水印效果

    vue實現(xiàn)頁面添加水印效果

    這篇文章主要為大家詳細介紹了vue實現(xiàn)頁面添加水印效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 深入理解Vue router的部分高級用法

    深入理解Vue router的部分高級用法

    這篇文章主要介紹了Vue router的部分高級用法,主要是針對已經有初步了解Vue-router的人,通過本文主要給大家介紹路由元信息,滾動行為以及路由懶加載這幾個的使用方法。感興趣的朋友一起看看吧
    2018-08-08
  • vue手機端input change時,無法執(zhí)行的問題及解決

    vue手機端input change時,無法執(zhí)行的問題及解決

    這篇文章主要介紹了vue手機端input change時,無法執(zhí)行的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue實現(xiàn)伸縮菜單功能

    vue實現(xiàn)伸縮菜單功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)伸縮菜單功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Vue3實現(xiàn)點擊按鈕實現(xiàn)文字變色功能

    Vue3實現(xiàn)點擊按鈕實現(xiàn)文字變色功能

    這篇文章主要介紹了使用Vue3實現(xiàn)點擊按鈕實現(xiàn)文字變色功能,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • element日期選擇器el-date-picker樣式圖文詳解

    element日期選擇器el-date-picker樣式圖文詳解

    最近寫的項目里面有一個功能是日期選擇功能,第一反應是使用element里面的el-date-picker組件,下面這篇文章主要給大家介紹了關于element日期選擇器el-date-picker樣式的相關資料,需要的朋友可以參考下
    2022-09-09
  • VUE實現(xiàn)大轉盤抽獎

    VUE實現(xiàn)大轉盤抽獎

    營運三寶(九宮格、大轉盤、老虎機,當然此三寶當然是最基礎的營銷運營手段),本片文章聊聊大轉盤,轉盤的實現(xiàn)邏輯應該是營銷方案較為簡單的一種了,本文將介紹如何實現(xiàn)大轉盤抽獎,感興趣的朋友可以參考下
    2021-05-05
  • vue axios請求攔截實例代碼

    vue axios請求攔截實例代碼

    axios 是一個基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端.這篇文章主要介紹了vue/axios請求攔截的相關知識,需要的朋友可以參考下
    2018-03-03

最新評論

晴隆县| 德江县| 新巴尔虎左旗| 德州市| 江陵县| 柏乡县| 沙河市| 金坛市| 新竹市| 吴堡县| 浦北县| 寿光市| 措勤县| 永胜县| 朝阳市| 丁青县| 隆尧县| 馆陶县| 图片| 太和县| 安顺市| 华池县| 化德县| 聂拉木县| 普兰县| 汕头市| 岑巩县| 枝江市| 五莲县| 龙川县| 宝清县| 陕西省| 永泰县| 霍城县| 大厂| 泗水县| 成安县| 上思县| 鱼台县| 大田县| 石景山区|