vue + canvas 圖片加水印


思路:將兩張圖片繪制為一張

目標:輸入的文字,繪制到圖片上,簡單實現圖片水印

效果:輸入的文字1: ‘你猜猜’ + 圖片2 = 圖片3(不要看清除水印的按鈕,本人垃圾 沒實現)

 

 

 

選擇圖片

html  

<input type="file" id="uploadFile" class="clip" accept="image/*" @change="chooseImg">

js

    // 上傳圖片
      chooseImg(event) {
        var file = event.target.files[0];
        var reader = new FileReader();
        reader.readAsDataURL(file);
        let _this = this;
        reader.onload = function() {
          _this.imgsrc = reader.result;
        };
        _this.imgsrc = file;
      }

將文字生成圖片

html

<input type="text" placeholder="請輸入你要添加的水印文字" class="water-text" v-model="text" @change="conformText()">

js

    //生成水印文字 canvas文字你可以設置為你喜歡的樣式
      conformText() {
        var canvas = document.createElement('canvas') //准備空畫布
        var ctx = canvas.getContext("2d")
        ctx.font = "20px Georgia" //canvas字體
        ctx.fillText(this.text, 10, 50)
        var gradient = ctx.createLinearGradient(0, 0, canvas.width, 0)
        gradient.addColorStop("0", "magenta")
        gradient.addColorStop("0.5", "blue")
        gradient.addColorStop("1.0", "red")
        ctx.fillStyle = gradient
        this.imgTextUrl = canvas.toDataURL("image/png")
      }

 

合成圖片

html

      <img id="imgsrc" :src="imgsrc" :width="size">
      <img id="imgTextUrl" :src="imgTextUrl" :width="size">
      <img id="imgUploadUrl" :src="imgUploadUrl" @click="downLoad()">
      <div class="conform" @click="confirmImg()">合成圖片</div>    

js

  // 合成圖片
      confirmImg(url) {
        var canvasAll = document.createElement('canvas')
        const size = 180
        canvasAll.width = this.size
        canvasAll.height = this.size
        var context = canvasAll.getContext('2d')

        // 這是上傳圖像
        var imgUpload = new Image();
        var img1 = document.getElementById('imgsrc')
        var img2 = document.getElementById('imgTextUrl')
        const that = this
        imgUpload.onload = function() {
          // 繪制
          context.drawImage(img1, 0, 0, img1.width, img1.height);
          // 再次繪制
          context.drawImage(img2, 0, 130, img2.width, img2.height);
          // 回調
          that.imgUploadUrl = canvasAll.toDataURL('image/png')
        }
        imgUpload.src = url;
      }

點擊合成后的圖片下載

js

    downLoad() {
        var a = document.createElement('a');
        a.href = this.imgUploadUrl  //將畫布內的信息導出為png圖片數據
        a.download = '水印圖片';  //設定下載名稱 如果不設置a.download 瀏覽器會嘗試打開這張圖片 而圖片會下載失敗
        a.click(); //點擊觸發下載
      }

文字水印可以加個drag 進行優化,拖拽調整位置,有時間我加上

 

以上就是圖片合成的核心代碼 很粗糙 但是我目前的思路就是這了

 

關於去除水印,我是這樣想的:

第一種:

1: 點擊圖片(水印部分)獲取當前點擊點的色值

2: 將該點顏色替換為目標顏色(目標顏色可以自己手動設置、可以在頁面加色卡 自定義選取,有點類似於ps)

第二種:

1: 點擊圖片(水印部分)獲取當前點擊點的色值

2: 選取圖片內要替換顏色的區域

3: 將區域內同色值的點全部替換為目標顏色

 

我使用第一種方法時,遇到的問題是第2步中,替換顏色的時候,圖片上沒有辦法添加顏色,鼠標點擊的時候那個點的顏色會隨着鼠標移動到下一個點走 

跪求有這方面經驗的大佬指點迷津啊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM