使用JavaScript給圖片添加水印的實(shí)現(xiàn)方法封裝
前言
當(dāng)涉及圖片處理時(shí),JavaScript是一種強(qiáng)大的工具。在本篇博客中,我們將學(xué)習(xí)如何使用JavaScript來給圖片添加水印,并將其封裝成一個(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元素來實(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實(shí)現(xiàn)數(shù)組扁平化的8種方式總結(jié)
數(shù)組扁平化指的是將一個(gè)多層嵌套的數(shù)組,處理成只有一層的數(shù)組,本文為大家整理了8個(gè)常用的JS實(shí)現(xiàn)數(shù)組扁平化的方法,希望對(duì)大家有所幫助2023-08-08
js格式化貨幣數(shù)據(jù)實(shí)現(xiàn)代碼
貨幣數(shù)據(jù)想要一某種形式在頁(yè)面中顯示的話,首先是必須要格式化的,下面為大家介紹下具體的格式化代碼,感興趣的朋友可以參考下2013-09-09
簡(jiǎn)單實(shí)現(xiàn)JavaScript彈幕效果
這篇文章主要幫助大家簡(jiǎn)單實(shí)現(xiàn)JavaScript彈幕效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
ajax前臺(tái)后臺(tái)跨域請(qǐng)求處理方式
本篇文章通過前臺(tái)跨域請(qǐng)求處理以及后臺(tái)跨域的數(shù)據(jù)處理方式介紹,詳細(xì)分析了ajax跨域的問題,對(duì)此有需要的朋友學(xué)習(xí)下。2018-02-02
layui form表單提交后實(shí)現(xiàn)自動(dòng)刷新
今天小編就為大家分享一篇layui form表單提交后實(shí)現(xiàn)自動(dòng)刷新,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
php main 與 iframe 相互通訊類(js+php同域/跨域)
這篇文章主要介紹了php main 與 iframe 相互通訊類(js+php同域/跨域),需要的朋友可以參考下2017-09-09
js中的eval()函數(shù)把含有轉(zhuǎn)義字符的字符串轉(zhuǎn)換成Object對(duì)象的方法
下面小編就為大家?guī)硪黄猨s中的eval()函數(shù)把含有轉(zhuǎn)義字符的字符串轉(zhuǎn)換成Object對(duì)象的方法。小編覺的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12

