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

使用JavaScript給圖片添加水印的實(shí)現(xiàn)方法封裝

 更新時(shí)間:2024年03月15日 09:52:49   作者:整天敲代碼的小韓  
圖片加水印是一種常見的圖像處理技術(shù),通常用于保護(hù)版權(quán)、防止盜用、增加圖片的識(shí)別度等多種場(chǎng)景,這篇文章主要給大家介紹了關(guān)于使用JavaScript給圖片添加水印的實(shí)現(xiàn)方法封裝,需要的朋友可以參考下

前言

當(dāng)涉及圖片處理時(shí),JavaScript是一種強(qiáng)大的工具。在本篇博客中,我們將學(xué)習(xí)如何使用JavaScript來(lái)給圖片添加水印,并將其封裝成一個(gè)函數(shù),以便在需要的時(shí)候重復(fù)使用。

準(zhǔn)備工作:    

在開始之前,確保你已經(jīng)準(zhǔn)備好了以下內(nèi)容:

1.一張待添加水印的圖片。

2.水印圖片。

3.一個(gè)基本的HTML文件和一個(gè)連接到JavaScript文件的script標(biāo)簽。

添加水印效果:

首先,我們需要編寫一個(gè)函數(shù),用于添加水印到圖片上。以下是一個(gè)示例函數(shù):

function addWatermark(imagePath, watermarkPath) {
  var canvas = document.createElement('canvas');
  var context = canvas.getContext('2d');

  // 創(chuàng)建一個(gè)新的Image對(duì)象,用于加載原始圖片
  var image = new Image();
  image.src = imagePath;

  // 在圖片加載完成后執(zhí)行下面的代碼
  image.onload = function() {
    canvas.width = image.width;
    canvas.height = image.height;

    // 將原始圖片繪制到canvas上
    context.drawImage(image, 0, 0);

    // 創(chuàng)建一個(gè)新的Image對(duì)象,用于加載水印圖片
    var watermark = new Image();
    watermark.src = watermarkPath;

    // 在水印圖片加載完成后執(zhí)行下面的代碼
    watermark.onload = function() {
      // 設(shè)置水印的位置和尺寸
      var x = 0;
      var y = 0;
      var width = image.width;
      var height = image.height;

      // 平鋪水印圖片
      context.fillStyle = context.createPattern(watermark, 'repeat');
      context.fillRect(x, y, width, height);

      // 將帶有水印的圖片轉(zhuǎn)換為base64格式
      var watermarkedImage = canvas.toDataURL();

      // 將base64格式的圖片顯示在頁(yè)面上或進(jìn)行其他操作
      // 例如:document.getElementById('result').src = watermarkedImage;
    };
  };
}

這個(gè)函數(shù)使用了HTML5的canvas元素來(lái)實(shí)現(xiàn)。它首先創(chuàng)建一個(gè)新的canvas元素,并通過getContext('2d')獲取2D繪圖上下文。然后,它加載原始圖片和水印圖片,并在加載完成后進(jìn)行處理。

在加載原始圖片后,我們將其繪制到canvas上。接著,加載水印圖片并在加載完成后執(zhí)行代碼。在這里,我們使用context.createPattern()方法創(chuàng)建了一個(gè)平鋪的圖案,并使用fillRect()方法將其繪制到canvas上。

最后,我們可以將帶有水印的圖片轉(zhuǎn)換為base64格式,并進(jìn)行進(jìn)一步的展示或處理。

使用封裝的函數(shù) :

要使用上面的函數(shù),你需要在HTML文件中調(diào)用它,并傳遞原始圖片和水印圖片的路徑作為參數(shù)。以下是一個(gè)簡(jiǎn)單的示例:

確保將函數(shù)所在的JavaScript文件引入到HTML文件中,并將原始圖片和水印圖片的路徑替換為實(shí)際的路徑。

<!DOCTYPE html>
<html>
<head>
  <title>添加水印</title>
</head>
<body>
  <script src="watermark.js"></script>
  <script>
    addWatermark('path/to/original/image.jpg', 'path/to/watermark.png');
  </script>
</body>
</html>

附:加文字水印

示例代碼:

  function blobToImg(blob) {
    return new Promise((resolve, reject) => {
      let reader = new FileReader()
      reader.addEventListener('load', () => {
        let img = new Image()
        img.src = reader.result
        img.addEventListener('load', () => resolve(img))
      })
      reader.readAsDataURL(blob)
    })
  }

  function imgToCanvas(img) {
    let canvas = document.createElement('canvas')
    canvas.width = img.width
    canvas.height = img.height
    let ctx = canvas.getContext('2d')
    ctx.drawImage(img, 0, 0)
    return canvas
  }

  function watermark(canvas, text) {
    return new Promise((resolve, reject) => {
      let ctx = canvas.getContext('2d')
      // 設(shè)置填充字號(hào)和字體,樣式
      ctx.font = "24px 宋體"
      ctx.fillStyle = "#FFC82C"
      // 設(shè)置右對(duì)齊
      ctx.textAlign = 'right'
      // 在指定位置繪制文字,這里指定距離右下角20坐標(biāo)的地方
      ctx.fillText(text, canvas.width - 20, canvas.height - 20)
      canvas.toBlob(blob => resolve(blob))
    })
  }

  function imgWatermark(dom, text) {
    let input = document.createElement('input')
    input.setAttribute('type', 'file')
    input.setAttribute('accept', 'image/*')
    input.onchange = async () => {
      let img = await blobToImg(input.files[0])
      let canvas = imgToCanvas(img)
      let blob = await watermark(canvas, text)
      let newImage = await blobToImg(blob)
      dom.appendChild(newImage)
    }
    dom.appendChild(input)
  }

  let dom = document.querySelector('#container')
  imgWatermark(dom, '水印文字')

總結(jié):

在本篇博客中,我們學(xué)習(xí)了如何使用JavaScript給圖片添加水印,并將其封裝成一個(gè)可重復(fù)使用的函數(shù)。通過使用canvas元素和相關(guān)的繪圖API,我們可以實(shí)現(xiàn)圖像處理和增強(qiáng)效果。

到此這篇關(guān)于使用JavaScript給圖片添加水印實(shí)現(xiàn)方法封裝的文章就介紹到這了,更多相關(guān)JS圖片添加水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

參考資料:

相關(guān)文章

  • js插件YprogressBar實(shí)現(xiàn)漂亮的進(jìn)度條效果

    js插件YprogressBar實(shí)現(xiàn)漂亮的進(jìn)度條效果

    ProgressBar.js 是一個(gè)借助動(dòng)態(tài) SVG 路徑的漂亮的,響應(yīng)式的進(jìn)度條效果。使用 ProgressBar.js 可以很容易地創(chuàng)建任意形狀的進(jìn)度條。這個(gè) JavaScript 庫(kù)提供線條,圓形和方形等幾個(gè)內(nèi)置的形狀,但你可使用 Illustrator 或任何其它的矢量圖形編輯器創(chuàng)建自己的進(jìn)度條效果。
    2015-04-04
  • SwfUpload在IE10上不出現(xiàn)上傳按鈕的解決方法

    SwfUpload在IE10上不出現(xiàn)上傳按鈕的解決方法

    在測(cè)試中發(fā)現(xiàn)使用了SwfUpload實(shí)現(xiàn)的無(wú)刷新上傳功能,在IE10上竟然無(wú)法使用了,難道SwfUpload不支持嗎?下面與大家分享下通過修改SwfUplad.JS文件讓其支持ie10
    2013-06-06
  • javaScript代碼飄紅報(bào)錯(cuò)看不懂?讀完這篇文章再試試

    javaScript代碼飄紅報(bào)錯(cuò)看不懂?讀完這篇文章再試試

    這篇文章主要介紹了javaScript代碼飄紅報(bào)錯(cuò)看不懂?讀完這篇文章再試試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Bootstrap進(jìn)度條與AJAX后端數(shù)據(jù)傳遞結(jié)合使用實(shí)例詳解

    Bootstrap進(jìn)度條與AJAX后端數(shù)據(jù)傳遞結(jié)合使用實(shí)例詳解

    這篇文章主要介紹了Bootstrap進(jìn)度條與AJAX后端數(shù)據(jù)傳遞結(jié)合使用,需要的朋友可以參考下
    2017-04-04
  • JavaScript雙向鏈表實(shí)現(xiàn)LRU緩存算法的示例代碼

    JavaScript雙向鏈表實(shí)現(xiàn)LRU緩存算法的示例代碼

    本文主要介紹了JavaScript雙向鏈表實(shí)現(xiàn)LRU緩存算法的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 非常不錯(cuò)的一個(gè)javascript 類

    非常不錯(cuò)的一個(gè)javascript 類

    [綠色]非常不錯(cuò)的一個(gè)javascript 類...
    2006-11-11
  • 一文詳細(xì)說(shuō)一說(shuō)Map和WeakMap的區(qū)別(面試官常問)

    一文詳細(xì)說(shuō)一說(shuō)Map和WeakMap的區(qū)別(面試官常問)

    這篇文章主要介紹了Map和WeakMap區(qū)別的相關(guān)資料,Map和WeakMap都是JavaScript中的鍵值對(duì)數(shù)據(jù)結(jié)構(gòu),它們的主要區(qū)別在于其鍵的存儲(chǔ)方式和內(nèi)存管理,需要的朋友可以參考下
    2026-03-03
  • js Clip奇思妙想之多彩漸變字效果

    js Clip奇思妙想之多彩漸變字效果

    本篇我們用同樣的原理,把文字用CLIP屬性分的更細(xì),分別著色,然后組合到一起,實(shí)現(xiàn)自左到右更精確的色彩漸變。問題是文字細(xì)化分割需要用到很多很多個(gè)元素,所以這里我們要用程序來(lái)控制,自動(dòng)生成這些元素。
    2008-11-11
  • js彈出窗口返回值的簡(jiǎn)單實(shí)例

    js彈出窗口返回值的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇js彈出窗口返回值的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-05-05
  • JS圖片懶加載的優(yōu)點(diǎn)及實(shí)現(xiàn)原理

    JS圖片懶加載的優(yōu)點(diǎn)及實(shí)現(xiàn)原理

    這篇文章主要介紹了JS圖片懶加載的優(yōu)點(diǎn)及實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

永嘉县| 乳源| 临湘市| 商水县| 孟村| 滨海县| 福贡县| 涟水县| 陵水| 临漳县| 铜山县| 乐安县| 金塔县| 定南县| 太和县| 凌云县| 崇州市| 阳江市| 上林县| 商丘市| 青田县| 麻阳| 贡觉县| 仲巴县| 顺昌县| 德惠市| 和田县| 子长县| 仙桃市| 宽甸| 城口县| 沁源县| 湘阴县| 中西区| 清丰县| 乌什县| 阜城县| 株洲市| 九龙县| 怀来县| 漳浦县|