HTML5+Canvas實現(xiàn)圖片添加水印功能
在現(xiàn)代Web開發(fā)中,圖像處理是一個常見的需求,尤其是為圖片添加水印。水印常用于標記圖像的版權、出處或時間信息等。本文將詳細介紹如何使用HTML5的Canvas技術為圖片添加水印,講解代碼實現(xiàn)的每一個細節(jié),幫助大家理解整個過程,并且能夠靈活運用。
一、HTML5 Canvas概述
Canvas是HTML5新增的一個元素,它提供了一個用于動態(tài)生成圖像的畫布環(huán)境。通過JavaScript,我們可以在Canvas上繪制圖形、文本或圖像。Canvas非常適合處理圖像編輯、圖形繪制、動畫等任務。
Canvas的基本用法:
- 創(chuàng)建Canvas元素:通過HTML中定義
<canvas>
標簽。 - 獲取Canvas上下文:Canvas的繪圖操作都是基于其上下文進行的。通過
getContext('2d')
可以獲取一個2D繪圖上下文對象,進而執(zhí)行各種繪圖操作。 - 繪制操作:包括繪制圖像、矩形、圓形、路徑等。
二、實現(xiàn)代碼分析
接下來,我們對代碼進行詳細的分析,逐步理解每一部分的功能和實現(xiàn)方式。
function addMark(base64, text, currentTime) { var img = new Image(); img.src = base64; img.onload = function() { // 準備canvas環(huán)境 var canvas = document.getElementById("myCanvas"); canvas.width = img.width; canvas.height = img.height; var ctx = canvas.getContext("2d"); // 繪制圖片 ctx.drawImage(img, 0, 0); // 識別左上角顏色 const imageData = ctx.getImageData(0, 0, 200, 100); const leftData = imageData.data; let r = 0, g = 0, b = 0, count = 0; for (let i = 0; i < leftData.length; i += 4) { r += leftData[i]; g += leftData[i + 1]; b += leftData[i + 2]; count++; } r = Math.floor(r / count); g = Math.floor(g / count); b = Math.floor(b / count); const brightness = r * 0.299 + g * 0.587 + b * 0.144; const textColor = brightness > 128 ? "rgba(0, 0, 0,1)" : "rgba(255, 255, 255,1)"; // 繪制水印 ctx.font = "35px SimHei"; ctx.fillStyle = textColor; ctx.fillText(text, 10, 50); ctx.fillText(currentTime, 10, 100); let result = canvas.toDataURL("image/jpeg", 0.5); return result; // 返回帶水印的Base64圖像 }; img.onerror = function() { alert("添加水印出錯了~"); }; };
1. 加載圖像
var img = new Image(); img.src = base64;
首先,我們創(chuàng)建一個Image
對象,并通過base64
格式的圖像數(shù)據加載圖片。base64
是將二進制數(shù)據編碼成ASCII字符的一種方式,常用于圖像數(shù)據傳輸和嵌入。
2. 創(chuàng)建Canvas并設置大小
var canvas = document.getElementById("myCanvas"); canvas.width = img.width; canvas.height = img.height;
通過document.getElementById
獲取一個HTML中的Canvas元素。隨后,我們將Canvas的寬高設置為圖片的寬高,以確保圖像能夠完整地繪制在Canvas中。
3. 繪制圖片到Canvas
var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0);
接下來,使用Canvas的drawImage
方法將加載的圖片繪制到Canvas上。ctx.getContext('2d')
方法用于獲取Canvas的繪圖上下文(2D),然后通過ctx.drawImage
將圖像繪制到畫布的指定位置。
4. 計算圖片左上角顏色亮度
const imageData = ctx.getImageData(0, 0, 200, 100); const leftData = imageData.data; let r = 0, g = 0, b = 0, count = 0; for (let i = 0; i < leftData.length; i += 4) { r += leftData[i]; g += leftData[i + 1]; b += leftData[i + 2]; count++; }
為了動態(tài)選擇水印的顏色,我們通過getImageData
方法獲取Canvas上的一個區(qū)域像素數(shù)據。在此代碼中,我們選擇了Canvas左上角的200x100像素區(qū)域,并計算這些像素的RGB值的平均值,以估算圖像的亮度。
5. 計算亮度并決定水印顏色
const brightness = r * 0.299 + g * 0.587 + b * 0.144; const textColor = brightness > 128 ? "rgba(0, 0, 0,1)" : "rgba(255, 255, 255,1)";
通過公式計算出圖像的亮度值。為了簡單地判斷背景色是亮色還是暗色,我們使用了加權平均亮度公式。若亮度大于128,則選擇黑色字體;否則,選擇白色字體。
6. 繪制水印文字
ctx.font = "35px SimHei"; ctx.fillStyle = textColor; ctx.fillText(text, 10, 50); ctx.fillText(currentTime, 10, 100);
此處我們設置了水印文字的字體和大?。?5px,使用SimHei
字體)。然后,使用fillText
方法分別繪制水印的姓名和當前時間,指定了文字的起始坐標。
7. 輸出帶水印的圖像
let result = canvas.toDataURL("image/jpeg", 0.5); return result;
最后,通過toDataURL
方法將Canvas的內容轉化為Base64編碼的JPEG圖片,并設置質量為0.5,返回帶有水印的圖像數(shù)據。
三、總結
通過HTML5的Canvas API,我們能夠靈活地為圖片添加水印,本文展示的代碼為基礎的水印添加方案,大家可以根據實際需求進一步擴展功能,如支持動態(tài)字體、透明度控制、多個水印等。
到此這篇關于HTML5+Canvas實現(xiàn)圖片添加水印功能的文章就介紹到這了,更多相關HTML5 Canvas圖片添加水印內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
通過JavaScript實現(xiàn)撲克牌游戲的示例代碼
這篇文章主要為大家詳細介紹了JavaScript如何通過面向對象實現(xiàn)一個簡單的撲克牌游戲,文中的示例代碼代碼講解詳細,感興趣的可以學習一下2022-07-07一款JavaScript壓縮工具:X2JSCompactor
一款JavaScript壓縮工具:X2JSCompactor...2007-06-06js如何調用qq互聯(lián)api實現(xiàn)第三方登錄
這篇文章主要介紹了js如何調用qq互聯(lián)api實現(xiàn)第三方登錄,需要的朋友可以參考下2014-03-03JavaScript 操作table,可以新增行和列并且隔一行換背景色代碼分享
這篇文章介紹了JavaScript操作table,可以新增行和列并且隔一行換背景色代碼,有需要的朋友可以參考一下2013-07-07