<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>图片打码</title>
<style>
canvas {
border: 1px solid red;
}
</style>
</head>
<body>
<canvas width="820" height="500" id="canvas"></canvas>
<script>
window.onload = function () {
let canvas = document.querySelector('#canvas');
if (!canvas.getContext) return;
let ctx = canvas.getContext('2d');
let image = new Image();
image.src = "dilireba.jpg";
image.onload = function () {
// 设置画布的宽度和高度
canvas.width = image.width * 2;
canvas.height = image.height;
ctx.drawImage(image, 0, 0); // 把图片绘制到画布上
// 获取原来图片的像素数据
let oldImageData = ctx.getImageData(0, 0, image.width, image.height);
// 创建一个新的像素数据
let newImageData = ctx.createImageData(image.width, image.height);
// 自己定义一个块的容量,把N个像素作为一个单位
// 把图片分块 每一块的size设置为5(自己随便定义的)
let size = 2;
for (let i = 0; i < oldImageData.width / size; i++) {
for (let j = 0; j < oldImageData.height / size; j++) {
// 从每一块中随机取出一个像素点的颜色
let x = Math.floor(Math.random() * size);
let y = Math.floor(Math.random() * size);
let color = getPxColor(oldImageData, i * size + x, j * size + y);
// 把这个像素点的颜色给这一小块全部铺满
for (let m = 0; m < size; m++) {
for (let n = 0; n < size; n++) {
setPxColor(newImageData, i * size + m, j * size + n, color);
}
}
}
}
ctx.putImageData(newImageData, image.width, 0);
}
// 设置指定坐标位置像素的值
function setPxColor(imageData, x, y, color) {
imageData.data[(y * imageData.width + x) * 4] = color[0];
imageData.data[(y * imageData.width + x) * 4 + 1] = color[1];
imageData.data[(y * imageData.width + x) * 4 + 2] = color[2];
imageData.data[(y * imageData.width + x) * 4 + 3] = color[3];
}
function getPxColor(imageData, x, y) {
let color = [];
// 有多宽,就是一排有多少个像素点
let width = imageData.width;
for (let i = 0; i < imageData.data.length; i++) {
color[0] = imageData.data[(y * width + x) * 4];
color[1] = imageData.data[(y * width + x) * 4 + 1];
color[2] = imageData.data[(y * width + x) * 4 + 2];
color[3] = imageData.data[(y * width + x) * 4 + 3];
}
return color;
}
}
</script>
</body>
</html>
利用canvas给图片打马赛克
最新推荐文章于 2024-06-07 11:38:47 发布