欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS利用Canvas實(shí)現(xiàn)文字水印和圖片水印合成

 更新時(shí)間:2022年11月19日 10:30:14   作者:zkj  
這篇文章主要為大家詳細(xì)介紹了JavaScript如何利用Canvas實(shí)現(xiàn)文字水印和圖片水印合成的效果,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下

介紹

給圖片添加水印可以幫助網(wǎng)站或作者保護(hù)自己的版權(quán),或防止內(nèi)容被別人利用。給圖片添加水印分為添加文字水印和添加圖片水印,水印一般都做成半透明的,這樣不至于影響原圖內(nèi)容的瀏覽。Canvas 圖片水印合成與 Canvas 實(shí)現(xiàn)圖片壓縮 原理基本相同:

  • CanvasRenderingContext2D.drawImage(image, dx, dy, dWidth, dHeight) 方法可以從頁(yè)面 DOM 元素作為圖像源來(lái)根據(jù)坐標(biāo)和大小重新繪制該圖像。
  • HTMLCanvasElement.toDataURL() 方法支持導(dǎo)出為 base64 字符串。

文字水印

首先創(chuàng)建一個(gè)空的 canvas 元素,并獲取其上下文。

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');

獲取頁(yè)面上需要合成水印的 img 元素,或者根據(jù)一個(gè) File 或 Blob 對(duì)象,創(chuàng)建一個(gè)空的 img 元素,將其 src 設(shè)為 File 或 Blob 對(duì)象的 URL。

設(shè)置 canvas 元素的寬高為 img 元素的寬高,清除畫布,繪制圖像。

canvas.width = img.width;
canvas.height = img.height;
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

設(shè)置字體、對(duì)齊方式、旋轉(zhuǎn)角度。

ctx.font = `bold ${img.height / 10}px arial`;
ctx.fillStyle = 'rgba(255, 0, 0, .2)';
ctx.textBaseline = 'bottom';
ctx.transform(1, 0.5, -0.5, 1, 0, -canvas.height / 2);

定義水印文字、水印高度,循環(huán)繪制水印。

let txt = '1234567 ';
const txtHeight = img.height / 6;
txt = Array(Math.ceil(canvas.width / ctx.measureText(txt).width) * 2).join(txt);
for (let i = 0; i < Math.ceil(canvas.height / txtHeight) * 2; i++) {
  ctx.fillText(txt, 0, i * txtHeight);
}

在頁(yè)面渲染合成后的圖像,釋放創(chuàng)建的 URL 對(duì)象。

result.src = canvas.toDataURL(type);
URL.revokeObjectURL(img.src);

效果

圖片水印

首先創(chuàng)建一個(gè)空的 canvas 元素,并獲取其上下文。

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');

獲取頁(yè)面上需要合成水印的 img 元素,或者根據(jù)一個(gè) File 或 Blob 對(duì)象,創(chuàng)建一個(gè)空的 img 元素,將其 src 設(shè)為 File 或 Blob 對(duì)象的 URL。

設(shè)置 canvas 元素的寬高為 img 元素的寬高,清除畫布,繪制圖像。

canvas.width = img.width;
canvas.height = img.height;
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

設(shè)置旋轉(zhuǎn)角度,創(chuàng)建重復(fù)圖像的模式,繪制水印。

ctx.transform(1, 0.5, -0.5, 1, 0, -canvas.height / 2);
ctx.rect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = ctx.createPattern(imgCover, 'repeat');
ctx.fill();

在頁(yè)面渲染合成后的圖像,釋放創(chuàng)建的 URL 對(duì)象。

result.src = canvas.toDataURL(type);
URL.revokeObjectURL(img.src);

效果

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

相關(guān)文章

  • Bootstrap Navbar Component實(shí)現(xiàn)響應(yīng)式導(dǎo)航

    Bootstrap Navbar Component實(shí)現(xiàn)響應(yīng)式導(dǎo)航

    這篇文章主要介紹了Bootstrap Navbar Component實(shí)現(xiàn)響應(yīng)式導(dǎo)航的相關(guān)資料,講解了Bootstrap Navbar應(yīng)用及源碼解析,需要的朋友可以參考下
    2016-10-10
  • javascript執(zhí)行上下文詳解

    javascript執(zhí)行上下文詳解

    執(zhí)行上下文可以說(shuō)是js代碼執(zhí)行的一個(gè)環(huán)境,存放了代碼執(zhí)行所需的變量,變量查找的作用域鏈規(guī)則以及this指向等。同時(shí),它也是js很底層的東西,很多的問題如變量提升、作用域鏈和閉包等都可以在執(zhí)行上下文中找到答案,所以這也是我們學(xué)習(xí)執(zhí)行上下文的原因
    2023-05-05
  • 原生js實(shí)現(xiàn)一個(gè)放大鏡效果超詳細(xì)

    原生js實(shí)現(xiàn)一個(gè)放大鏡效果超詳細(xì)

    這篇文章主要介紹了原生js實(shí)現(xiàn)一個(gè)放大鏡效果超詳細(xì),文章圍繞主題展開詳細(xì)的內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • laypage+SpringMVC實(shí)現(xiàn)后端分頁(yè)

    laypage+SpringMVC實(shí)現(xiàn)后端分頁(yè)

    這篇文章主要為大家詳細(xì)介紹了laypage+SpringMVC實(shí)現(xiàn)后端分頁(yè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 通過JavaScript使Div居中并隨網(wǎng)頁(yè)大小改變而改變

    通過JavaScript使Div居中并隨網(wǎng)頁(yè)大小改變而改變

    自己的頁(yè)面太難看了,要居中沒居中,要顏色沒顏色,但是無(wú)論是怎么樣都得使登錄的框居中吧,下面與大家分享下通過JavaScript可以簡(jiǎn)單的使Div在頁(yè)面上居中,隨著網(wǎng)頁(yè)大小的改變做出相應(yīng)的改變
    2013-06-06
  • 教你用JS獲取Headers頭部信息

    教你用JS獲取Headers頭部信息

    這篇文章主要給大家介紹了關(guān)于用JS獲取Headers頭部信息的相關(guān)資料,頭部信息是在JavaScript中進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí)常用的操作,Headers 頭部信息包含了請(qǐng)求或響應(yīng)的元數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • 最新評(píng)論