效果演示
什么是canvas?
<canvas> 元素用于图形的绘制,只是图形容器。
元素本身并没有绘制能力,您必须使用js脚本来绘制图形。
getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性
知识点简介
let img = new Image()
img.src = './cat.webp'
document.body.appendChild(img)
ctx.drawImage()
context.drawImage(img,x,y);
context.drawImage(img,x,y,width,height);
var imgData=context.getImageData(x,y,width,height); 从(0,0) 到 (width,height)
ctx.putImageData(imgData, 0, 0)
全部代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
body {
font-size: 0;
}
* {
margin: 0;
padding: 0;
}
img {
display: inline-block;
}
</style>
</head>
<body>
<img src="./cat.webp">
<button onclick="addCanvas()">生成Canvas</button>
<button onclick="generateImg()">生成图片</button>
<script>
function addCanvas() {
let bt = document.querySelector('button')
let img = new Image()
img.src = './cat.webp'
img.onload = function() {
let imgWidth = this.width
let imgHeight = this.height
let {
canvas, ctx } = createCanvasAndCtx(imgWidth, imgHeight)
ctx.drawImage(this, 0, 0, imgWidth, imgHeight)
document.body.insertBefore(canvas, bt)
}
}
function createCanvasAndCtx(imgWidth, imgHeight) {
let canvas = document.createElement('canvas')
canvas.setAttribute('width', imgWidth)
canvas.setAttribute('height', imgHeight)
canvas.setAttribute('onmousedown', 'start()')
let ctx = canvas.getContext('2d')
return {
canvas,
ctx
}
}
function start() {
let img = document.querySelector('img'),
canvas = document.querySelector('canvas'),
ctx = canvas.getContext('2d')
imgData = ctx.getImageData(0, 0, img.clientWidth, img.clientHeight)
canvas.onmousemove = (e) => {
let w = imgData.width,
h = imgData.height,
num = 10,
color = getXY(imgData, e.offsetX, e.offsetY)
for (let i = 0; i < num; i++) {
for (let j = 0; j < num; j++) {
setXY(imgData, e.offsetX + i, e.offsetY + j, color)
}
}
ctx.putImageData(imgData, 0, 0)
}
}
function getXY(obj, x, y) {
var {
width, height, data} = obj,
color = []
color[0] = obj.data[4 * (y * width + x)]
color[1] = obj.data[4 * (y * width + x) + 1]
color[2] = obj.data[4 * (y * width + x) + 2]
color[3] = obj.data[4 * (y * width + x) + 3]
return color
}
function setXY(obj, x, y, color) {
var {
width, height, data} = obj,
color = []
obj.data[4 * (y * width + x)] = color[0]
obj.data[4 * (y * width + x) + 1] = color[1]
obj.data[4 * (y * width + x) + 2] = color[2]
obj.data[4 * (y * width + x) + 3] = color[3]
}
function generateImg() {
let canvas = document.querySelector('canvas')
let newImg = new Image()
newImg.src = canvas.toDataURL("image/png")
document.body.append(newImg)
}
</script>
</body>
</html>