js简单获取图片像素矩阵

3,373 阅读1分钟

js简单获取图片像素矩阵

有一张简单的图片,怎么简单地转换成像素矩阵呢?

1.png

下面是简单的矩阵数据获取方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>获取图片像素矩阵</title>
	</head>
	<body>
		<canvas id="canvas_id"></canvas>
		<div id="box"></div>
		<script>
			// 10进制转16进制,统一返回两位
			function fixNum(num) {
				var c = num.toString(16)
				if (c.length === 1) {
					c = '0' + c
				}
				return c
			}
			// 获取canvas
			var canvas = document.getElementById('canvas_id')
			var ctx = canvas.getContext('2d')
			// 创建图片对象
			var img = new Image()
			// 图片地址自己更换一下
			img.src = "img/1.png"
			// 图片的比例数值
			var scale = 0.5
			// 图片加载完毕回调函数
			img.onload = function() {
				// 图片宽高
				var w = Math.floor(img.width * scale),
					h = Math.floor(img.height * scale)
				// 画布宽高
				canvas.width = w
				canvas.height = h
				// 绘制图片到canvas
				ctx.drawImage(img, 0, 0, w, h)
				// 获取图片数据
				var imgData = ctx.getImageData(0, 0, w, h);
				// 存储颜色列表
				var list = []
				for (var i = 0; i < imgData.data.length; i += 4) {
					// 将像素数值转换成颜色,添加进列表
					list.push(
						`#${fixNum(imgData.data[i])}${fixNum(imgData.data[i+1])}${fixNum(imgData.data[i+2])}${fixNum(imgData.data[i+3])}`
					)
				}
				// 准备一个位置展示一下像素矩阵
				var box = document.getElementById("box")
				// 矩阵数组
				var data = new Array()
				for (var i = 0; i < h; i++) {
					// 创建行数组
					data[i] = new Array()
					var row = document.createElement("div")
					row.style.display = 'flex'
					for (var j = 0; j < w; j++) {
						// 创建每一个像素块
						data[i][j] = list[i * w + j]
						var cell = document.createElement("div")
						cell.style.background = data[i][j]
						cell.style.width = '10px'
						cell.style.height = '10px'
						cell.setAttribute("id", `${i}_${j}`)
						row.append(cell)
					}
					box.append(row)
				}
				// 把像素数组放到文本框
				var e = document.createElement('textarea')
				e.value = JSON.stringify(list)
				box.append(e)
			}
		</script>
	</body>
</html>

剩下的就自己去体验吧

1625454875(1).jpg 效果