在线取色器
上传图片任意位置点击取色 · 实时放大镜 · 历史色彩 · HEX / RGB / HSL / HSV / CMYK / LAB
上传图片任意点取色/历史色
上传图片任意位置点击取色 · 实时放大镜 · 历史色彩 · HEX / RGB / HSL / HSV / CMYK / LAB
JPG / PNG / WebP / GIF · 浏览器本地处理
放大镜:鼠标移动到图片上自动显示 10× 放大镜,精确到像素,避免选错。
点击取色:在图片上点击任意位置,颜色实时显示在右侧并自动加入历史。
历史色彩:最近选取的 50 个颜色,鼠标悬浮显示 HEX,点击复制。
隐私:图片仅在浏览器本地解析,不会上传任何服务器。
了解工具定位 · 使用场景 · 对比优势
上传一张图片,点击任意位置即可取色,颜色值自动复制到剪贴板,同时存入历史记录方便复用。设计师、前端开发者、插画师在比对色值、提取参考色时,无需打开设计软件。所有取色在浏览器内完成,图片不上传服务器。
UI 设计师从竞品截图、灵感素材中提取品牌色/辅助色时,传统方法需要打开 Photoshop 多次吸色。本工具上传图片后,鼠标悬停任意位置即可实时显示颜色值,点击即存入历史色列表。支持 HEX/RGB/HSL 三种格式一键复制,无需来回切换工具,提升配色提取效率。
电商运营在制作活动主图时,需要从品牌 VI 手册或往期海报中提取标准色,避免视觉偏差。上传参考图片后,可精确取到每个色块的数值,历史色列表自动记录已取的颜色,方便对比不同区域的色值是否一致,确保主图配色符合品牌规范。
视频剪辑师在后期调色时,常从电影截图或参考视频中提取特定场景的色调。本工具支持上传高清截图,通过点选获取阴影/中间调/高光的色值,历史色列表可对比多个参考画面的色彩倾向,辅助建立统一的调色 LUT 或色彩方案。
平面设计师在印刷前需要确认 CMYK 色值是否在印刷色域内。上传设计稿截图后,可逐点提取颜色并查看其 CMYK 数值,历史色列表方便批量对比多个区域的色值是否超出印刷边界,避免因色差导致返工。
科研人员处理显微图像或卫星遥感图时,需要标注特定区域的 RGB 色值用于分类或记录。上传图片后,可精确取到感兴趣区域的色值,历史色列表自动保存所有标注点,方便后续统计分析或论文配图说明。
| 维度 | 本工具 | 竞品 A (ColorPick Eyedropper) | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,图片不上传服务器 | 浏览器扩展,需授予页面权限 | 依赖截图软件+本地取色,无网络传输 |
| 处理速度 | 即时取色,毫秒级响应 | 需加载扩展,取色有轻微延迟 | 截图→导入PS→取色,数分钟 |
| 离线可用 | 完全离线(纯前端实现) | 需安装扩展,离线可用 | 完全离线 |
| 图片格式支持 | 常见格式(PNG/JPEG/WebP等) | 仅限当前网页元素,不支持上传图片 | 取决于截图/编辑软件格式支持 |
| 历史色管理 | 自动记录最近取色,可复制 | 无历史记录功能 | 需手动记录或截图保存 |
| 平台兼容 | 任何现代浏览器,无需安装 | 仅Chrome/Edge等支持扩展的浏览器 | 需安装专业软件(如Photoshop) |
| 取色精度 | 像素级精确,支持放大预览 | 像素级,但无放大辅助 | 取决于软件放大倍数 |
| 使用门槛 | 打开网页即用,零学习成本 | 需安装扩展,了解权限设置 | 需掌握专业软件操作 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 上传一张纯色背景图片,点击红色区域 | #FF0000 | 典型场景:从设计素材中取色 |
| 上传一张照片,点击人物肤色区域 | #D4A574 | 典型场景:从真实照片中提取颜色 |
| 上传一张渐变图片,点击渐变中间位置 | #808080 | 边界 case:渐变区域取色,结果取决于点击位置 |
| 上传一张极暗图片,点击黑色区域 | #000000 | 边界 case:纯黑取色,验证 RGB 最小值 |
| 上传一张极亮图片,点击白色区域 | #FFFFFF | 边界 case:纯白取色,验证 RGB 最大值 |
| 上传一张带透明通道的 PNG 图片,点击透明区域 | #000000 | 易错 case:透明区域取色结果为黑色 |
| 连续点击图片不同位置 5 次 | #FF5733, #33FF57, #3357FF, #F333FF, #FF3333 | 典型场景:历史色记录,方便对比 |
鼠标在图片边框外点击,取色器返回 #000000 或 #FFFFFF点击图片内部的像素区域,确保光标落在图片像素上取色器只读取图片像素的颜色值;点击图片外的空白区域(如背景、边框)会取到页面背景色,而非图片颜色
上传透明 PNG 图片,点击透明区域后取色器返回 rgba(0,0,0,0) 或 #000000如需取透明区域的“视觉颜色”,先为图片添加白色或纯色背景再上传取色器读取的是像素的 RGBA 值;透明像素的 RGB 通道可能为 0 或未定义,不会自动模拟背景色
在浏览器中截图后上传,取色结果与截图软件显示的颜色有偏差直接上传原始图片文件(PNG/JPG/WebP)而非屏幕截图截图软件会二次压缩或转换色彩空间(如 sRGB→Display P3);原始图片的颜色值才是设计师/开发需要的准确值
从取色器复制 #FF8800 后,直接用 RGB 线性插值计算渐变色先将 sRGB 值转换到线性空间(去除 gamma),计算插值,再转换回 sRGBsRGB 编码包含 gamma(≈2.2);直接在线性 RGB 空间做颜色混合会导致中间色偏暗,视觉上不自然
从网页图片取色 #003366,直接告诉印刷厂用这个十六进制值使用专业分色工具(如 Photoshop 的 CMYK 转换)将 RGB 转为 CMYK 色值取色器返回的是 sRGB 色值,适用于屏幕显示;印刷使用 CMYK 色域更窄,直接 RGB→CMYK 转换会丢失色域外颜色
直接上传 4000×6000 像素的 RAW 文件或未压缩 TIFF(>50MB)先压缩为 WebP 或 JPEG(质量 80%),或缩小至 2000px 以内再上传取色器在浏览器端处理图片,超大图片会占用大量内存并导致 Canvas 渲染卡顿;浏览器对 Canvas 尺寸也有上限(通常 16384px)
上传动画 GIF 后点击某一帧,取色器只返回第一帧的颜色如需取动画中某帧的颜色,先用视频编辑工具截取该帧为静态图片再上传取色器只读取静态图片(PNG/JPEG/WebP/静态 GIF);动画 GIF 或视频文件不会被逐帧解析
公式推导 · 流程图解 · 依据出处
RGB → Hex: #RRGGBB, 其中 RR = round(R × 255), GG = round(G × 255), BB = round(B × 255)
R — 红色通道值(0.0–1.0)G — 绿色通道值(0.0–1.0)B — 蓝色通道值(0.0–1.0)RR — 十六进制红色分量(00–FF)GG — 十六进制绿色分量(00–FF)BB — 十六进制蓝色分量(00–FF)取色器点击图片上某像素,浏览器返回 RGB 浮点值 (0.847, 0.196, 0.125)。R=0.847 → RR=round(0.847×255)=round(215.985)=216=D8;G=0.196 → GG=round(0.196×255)=round(49.98)=50=32;B=0.125 → BB=round(0.125×255)=round(31.875)=32=20。最终 Hex 色值为 #D83220。
适用于所有基于 sRGB 色彩空间的数字图像取色。若图片嵌入 ICC 色彩配置文件(如 Adobe RGB、ProPhoto RGB),直接取色结果与 sRGB 显示存在偏差,需先进行色彩空间转换。
3 种主流语言 · 复制即用
from PIL import Image
import sys
# 打开图片,获取指定坐标的 RGB 值
img = Image.open("sample.png")
pixels = img.load()
# 取坐标 (100, 200) 处的颜色
x, y = 100, 200
r, g, b = pixels[x, y]
# 输出 hex 格式
hex_color = f"#{r:02x}{g:02x}{b:02x}"
print(f"RGB({r}, {g}, {b}) → {hex_color}")package main
import (
"fmt"
"image"
_ "image/png"
"os"
)
func main() {
f, _ := os.Open("sample.png")
defer f.Close()
img, _, _ := image.Decode(f)
// 获取坐标 (100, 200) 处的颜色
r, g, b, _ := img.At(100, 200).RGBA()
// RGBA() 返回 16 位值,需右移 8 位转为 8 位
hex := fmt.Sprintf("#%02x%02x%02x", r>>8, g>>8, b>>8)
fmt.Println(hex)
}// 浏览器端:从 Canvas 取色
const img = new Image();
img.src = 'sample.png';
img.onload = () => {
const canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
// 取坐标 (100, 200) 处的颜色
const [r, g, b] = ctx.getImageData(100, 200, 1, 1).data;
const hex = `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
console.log(hex); // 输出 hex 颜色值
};8 个高频疑问