写一个水印效果写了好久,最终败给了canvas,还是选择用div写水印

function watermark2(id, element) {
let defaultConfig = {
mark_element: element,
mark_text: id || ‘’,
mark_x: 0,
mark_y: 0,
mark_color: ‘rgba(255,255,255,.5)’,
mark_size: ‘16’,
mark_font: “微软雅黑”,
mark_width: 100,
mark_height: 30,
mark_angle: ‘45deg’
}
let body = document.querySelector(‘body’);
let canvas = document.createElement(‘canvas’)
if (!element) {
defaultConfig.mark_element = body
}
let width = Math.max(body.scrollWidth, body.clientWidth)
let height = Math.max(body.scrollHeight, body.clientHeight)
canvas.width = width;
canvas.height = height;
canvas.style.zIndex = 0
canvas.style.pointerEvents = ‘none’;
canvas.style.position = ‘absolute’;
canvas.style.top = 0;
canvas.style.left = 0;
defaultConfig.mark_cols = Math.ceil(width / defaultConfig.mark_width)
defaultConfig.mark_rows = Math.ceil(height / defaultConfig.mark_height)
let x, y;
let ctx = canvas.getContext(‘2d’)
ctx.fillStyle = defaultConfig.mark_color
ctx.textAlign = “center”
for (let i = 0; i < defaultConfig.mark_rows; i++) {
y = defaultConfig.mark_y + defaultConfig.mark_height * i + defaultConfig.mark_height / 2 + defaultConfig.mark_size / 2;
for (let j = 0; j < defaultConfig.mark_cols; j++) {
if(j>0){
ctx.restore()
}
x = defaultConfig.mark_x + defaultConfig.mark_width * j + defaultConfig.mark_width / 2;
ctx.font = ${defaultConfig.mark_size}px ${defaultConfig.mark_font};
ctx.fillText(defaultConfig.mark_text, x, y)
ctx.rotate(45 * Math.PI / 180)
ctx.save()
}
}
defaultConfig.mark_element.append(canvas)
}

function watermark1(id) {
var can = document.createElement(‘canvas’);
let body = document.querySelector(‘body’);
let config={
width:100,
height: 40,
}
// body.appendChild(can);

var cans = can.getContext('2d');
cans.rotate(-45 * Math.PI / 180);
cans.font = "400 16px Microsoft JhengHei";
cans.fillStyle = "rgba(255,255,255,.5)";
cans.textAlign = 'center';
cans.textBaseline = 'Middle';
// if (cans.measureText(cpyName).width > 180) {
//     var size = 180 / cpyName.length
//     cans.font = '800 ' + size + 'px ' + ' Microsoft JhengHei'
// }
cans.fillText(id, 60, 100);
body.style.backgroundImage = "url(" + can.toDataURL("image/png") + ")";

}

function watermark(id, element) {
let defaultConfig = {
mark_element: element,
mark_text: id || ‘’,
mark_color: ‘rgba(255,255,255,.5)’,
mark_size: ‘16’,
mark_font: “微软雅黑”,
mark_width: 80,
mark_height: 30,
mark_angle: ‘45deg’
}
let div=document.createElement(‘div’)
let body = document.querySelector(‘body’);
if (!element) {
defaultConfig.mark_element = body
}
div.style.display=‘flex’,
div.style.justifyContent=‘space-around’
div.style.flexWrap=‘wrap’
div.style.pointerEvents = ‘none’;
div.style.zIndex = 0
div.style.position = ‘absolute’;
div.style.top = 0;
div.style.left = 0;
div.style.width=‘100%’,
div.style.height=‘100%’
let width = Math.max(body.scrollWidth, body.clientWidth)
let height = Math.max(body.scrollHeight, body.clientHeight)
defaultConfig.mark_cols = Math.ceil(width / defaultConfig.mark_width)
defaultConfig.mark_rows = Math.ceil(height / defaultConfig.mark_height)
let num=defaultConfig.mark_colsdefaultConfig.mark_rows
for(let i=0;i<num;i++){
let canvas=document.createElement(‘canvas’)
canvas.width = defaultConfig.mark_width;
canvas.height = defaultConfig.mark_height;
let ctx=canvas.getContext(‘2d’)
// ctx.translate(canvas.width/2,canvas.height/2)
ctx.fillStyle=defaultConfig.mark_color;
ctx.textAlign=‘center’
ctx.textBaseline=‘middle’
ctx.font=${defaultConfig.mark_size}px ${defaultConfig.mark_font}
ctx.fillText(defaultConfig.mark_text,canvas.width/2,canvas.height/2+defaultConfig.mark_size/2)
ctx.rotate(40
Math.PI/180)
div.appendChild(canvas)
}
defaultConfig.mark_element.append(div)
}

function watermark(id, element) {
let defaultConfig = {
mark_element: element,
mark_text: id || ‘’,
mark_color: ‘red’,
mark_size: ‘16’,
mark_font: “微软雅黑”,
mark_width: 200,
mark_height: 200,
mark_angle: 45
}
let body = document.querySelector(‘body’);
if (!element) {
defaultConfig.mark_element = body
}
let width = Math.max(body.scrollWidth, body.clientWidth)
let height = Math.max(body.scrollHeight, body.clientHeight)
defaultConfig.mark_cols = Math.ceil(width / defaultConfig.mark_width)
defaultConfig.mark_rows = Math.ceil(height / defaultConfig.mark_height)
let x,y;
for (let i = 0; i < defaultConfig.mark_rows; i++) {
y = defaultConfig.mark_height * i;
for (let j = 0; j < defaultConfig.mark_cols; j++) {
x = defaultConfig.mark_width * j;
let div=document.createElement(‘div’)
div.innerHTML=defaultConfig.mark_text
div.style.transform=“rotate(-”+defaultConfig.mark_angle+“deg)”;
div.style.position=‘absolute’;
div.style.left=x+‘px’;
div.style.top=y+‘px’;
div.style.zIndex=9999999
div.style.pointerEvents=‘none’
div.style.color=defaultConfig.mark_color
div.style.fontSize=defaultConfig.mark_size+‘px’
div.style.fontFamily=defaultConfig.mark_font
div.style.width=defaultConfig.mark_width+‘px’
div.style.height=defaultConfig.mark_height+‘px’
div.style.textAlign=“center”
div.style.lineHeight=defaultConfig.mark_height+‘px’
defaultConfig.mark_element.append(div)
}
}
}

//最后采用的是这套代码,以上都是泪,都是卡住我的高山,有时间我一定要去看看canvas的rotate到底是啥玩意,老子不想累加旋转怎么都解决不了
function watermark(id, element) {
let defaultConfig = {
mark_element: element,
mark_text: id || ‘’,
mark_color: ‘red’,
mark_size: ‘16’,
mark_font: “微软雅黑”,
mark_width: 200,
mark_height: 200,
mark_angle: 45
}
let body = document.querySelector(‘body’);
if (!element) {
defaultConfig.mark_element = body
}
let width = Math.max(body.scrollWidth, body.clientWidth)
let height = Math.max(body.scrollHeight, body.clientHeight)
defaultConfig.mark_cols = Math.ceil(width / defaultConfig.mark_width)
defaultConfig.mark_rows = Math.ceil(height / defaultConfig.mark_height)
let oTemp=document.createElement(‘div’)
oTemp.style.display=‘flex’;
oTemp.style.justifyContent=‘space-around’;
oTemp.style.flexWrap=‘wrap’
let x,y;
for (let i = 0; i < defaultConfig.mark_rows; i++) {
y = defaultConfig.mark_height * i;
for (let j = 0; j < defaultConfig.mark_cols; j++) {
x = defaultConfig.mark_width * j;
let div=document.createElement(‘div’)
div.innerHTML=defaultConfig.mark_text
div.style.transform=“rotate(-”+defaultConfig.mark_angle+“deg)”;
div.style.position=‘absolute’;
div.style.left=x+‘px’;
div.style.top=y+‘px’;
div.style.zIndex=9999999
div.style.pointerEvents=‘none’
div.style.color=defaultConfig.mark_color
div.style.fontSize=defaultConfig.mark_size+‘px’
div.style.fontFamily=defaultConfig.mark_font
div.style.width=defaultConfig.mark_width+‘px’
div.style.height=defaultConfig.mark_height+‘px’
div.style.textAlign=“center”
div.style.lineHeight=defaultConfig.mark_height+‘px’
oTemp.appendChild(div)
}
}
defaultConfig.mark_element.appendChild(oTemp)
}
export default watermark

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 HTML5 中给照片添加水印,可以使用 Canvas API 和 CSS3 的 `::before` 伪元素来实现。以下是一个简单的例子: ```html <!DOCTYPE html> <html> <head> <title>添加水印</title> <style type="text/css"> #canvas { position: absolute; top: 0; left: 0; z-index: -1; } #watermark::before { content: "Watermark"; font-size: 2em; color: rgba(255, 255, 255, 0.5); position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotate(-45deg); z-index: 1; } </style> </head> <body> <img id="photo" src="photo.jpg"> <canvas id="canvas"></canvas> <div id="watermark"></div> <script type="text/javascript"> window.onload = function() { var canvas = document.getElementById('canvas'); var photo = document.getElementById('photo'); var watermark = document.getElementById('watermark'); canvas.width = photo.width; canvas.height = photo.height; var ctx = canvas.getContext('2d'); ctx.drawImage(photo, 0, 0); ctx.font = "bold 30px Arial"; ctx.fillStyle = "rgba(255, 255, 255, 0.5)"; ctx.rotate(-45 * Math.PI / 180); ctx.fillText("Watermark", -canvas.height/2, canvas.width/2); watermark.style.width = photo.width + "px"; watermark.style.height = photo.height + "px"; } </script> </body> </html> ``` 上面的代码中,我们首先在页面中添加一个 `img` 元素,它的 `src` 属性指向要添加水印的照片。然后,我们添加一个 `canvas` 元素和一个 `div` 元素,分别用于绘制水印和显示水印文本。 在 JavaScript 中,我们首先获取 `canvas`、`photo` 和 `watermark` 元素,然后将 `canvas` 的宽度和高度设置为 `photo` 的宽度和高度,这样它就可以完全覆盖照片。接着,我们使用 `getContext` 方法获取 `canvas` 的 2D 渲染上下文对象 `ctx`,然后使用 `drawImage` 方法将照片绘制到 `canvas` 上。 接下来,我们设置水印的样式,包括字体大小、颜色、位置和旋转角度等。这里我们将水印文本绘制在 `canvas` 上,并将它旋转 `-45deg`,这样它就可以呈现倾斜的效果。最后,我们将水印文本的样式设置为 `::before` 伪元素的样式,这样它就可以显示在照片上方。 最后,我们在 `watermark` 元素的样式中将它的宽度和高度都设置为 `photo` 的宽度和高度,这样它就可以与照片完全重合。 希望这个例子能够帮助您实现在 HTML5 中给照片添加水印效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值