一、功能概述
该HTML文件实现了一个完整的网页端颜色提取工具,主要功能包括:
- 支持本地图片上传预览
- 实时显示鼠标坐标颜色值(RGB+Alpha)
- 点击画布获取指定颜色并固定展示
- 动态更新页面颜色样式
二、核心代码解析
1. HTML结构
html
<canvas width="600" height="600" id="canvas"></canvas>
<input type="file" name="file" id="file" accept="image/*">
<div id="color"></div> <!-- 实时颜色显示 -->
<div id="clickColor"></div> <!-- 点击选中颜色显示 -->
2. 初始化设置
javascript
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d'); // 初始化样式设置
color.style.cssText = ` width:600px; height:50px; line-height:50px; color:#000; `;
3. 图片加载处理
javascript
file.addEventListener('change', function(e) { const file = e.target.files[0]; const url = URL.createObjectURL(file); // 创建临时URL const img = new Image(); img.src = url; img.onload = function() { ctx.drawImage(img, 0, 0, canvas.width, canvas.height); URL.revokeObjectURL(url); // 释放内存 } });
4. 颜色获取核心逻辑
javascript
canvas.addEventListener('mousemove', function(e) {
const x = e.offsetX;
const y = e.offsetY;
const pixel = ctx.getImageData(x, y, 1, 1).data;
const rgba = `rgba(${pixel[0]}, ${pixel[1]}, ${pixel[2]}, ${pixel[3] / 255})`;
console.log(rgba);
color.style.backgroundColor = rgba;
color.innerText = rgba;
})
三、关键技术点
1. Canvas像素读取
使用getImageData(x, y, 1, 1)
获取单个像素数据,返回的data
数组包含: - data[0]:红色通道(0-255) - data[1]:绿色通道(0-255) - data[2]:蓝色通道(0-255) - data[3]:透明度通道(0-255)
2. 事件绑定优化
- 使用
mousemove
实现实时预览 - 通过
click
事件固定颜色值 - 采用CSS样式动态更新替代DOM操作,提升性能
3. 内存管理
- 使用
URL.revokeObjectURL()
及时释放图片资源 - 避免canvas内容持续叠加,通过
clearRect
保持画布干净
四、使用流程
- 打开页面
- 点击文件选择框上传图片
- 鼠标移动查看实时颜色
- 点击任意位置获取目标颜色
- 颜色值同步显示在下方区域
五、扩展建议
- 增加图片缩放适配功能
- 添加颜色格式转换(HEX/RGB)
- 支持拖拽上传
- 实现取色历史记录
- 添加放大镜效果增强体验
该实现展示了HTML5 Canvas在图像处理方面的强大能力,结合文件API和DOM操作,构建了一个轻量级的网页取色工具。完整代码仅需一个HTML文件即可运行,适合前端开发者学习和扩展。