更新记录

1.0.0(2026-11-05)

首个版本:色坐标 xy ↔ uv ↔ u'v' 双向换算;相关色温按黑体轨迹最近点求解(标准照明体 A 还原 2856K、D65 还原 6504K);Duv 有符号法向距离(D65 得 +0.0032、A 得 0);单点判定给 Δu'v'、容差倍数与合格/临界/超差三档,并描述偏绿偏红;色度图数据含轨迹采样、容差圈、目标点与落点;批量分选按档标称色温判定,出各档数量、占比、档内良率与最远一颗;明细 12 列与分档汇总 9 列 CSV 导出(带 BOM、零存储权限)。UTS→Kotlin 编译通过(index.kt 1356 行与 classes.dex 61336 字节已生成),107 项回归测试全部通过;真机未执行(设备 adb 状态 unauthorized),市场截图为 H5 渲染并标注示例数据。


平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× √ × × √ × √ × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

光源色度与色差判定

给 LED 封装厂与灯具厂的品质、工艺和出货检验:把分光计上的一串色坐标变成「这颗灯珠合不合格、这批货能不能出」。

算相关色温 CCT、Duv、与目标色点的 Δu'v' 色偏差,直接判合格 / 临界 / 超差,并说清是偏绿还是偏红;一批色坐标按色温档自动归集,出各档数量、占比与档内良率,导出明细与分档两份 CSV。

纯本地计算,不联网、不上传。仅支持 Android。


购买前必读

适合你,如果:

  • 出货抽检时要按客户色容差判灯珠,靠人眼比对或手工查表太慢,还容易两拨人判得不一样;
  • 客户给的是「3000K ± 一定色偏差」,你需要把分光计读到的 x、y 直接变成合格与否;
  • 一批几千颗灯珠要分档出货,想知道每档多少颗、哪一档良率低、最差的是哪一颗;
  • 车间没有 Minitab,也不想为看一眼色温专门开电脑。

不适合你,如果:

  • 需要 ANSI C78.377 的 4 阶 / 5 阶椭圆(SDCM)档位判定 —— 本插件的容差是 Δu'v' 半径,由你自己按客户要求设定,不内置标准椭圆参数表;
  • 需要显色指数 CRI / TM-30 / 光谱功率分布分析 —— 这些要完整光谱数据,本插件只吃色坐标;
  • 需要直接驱动分光计或色差仪 —— 本插件不碰蓝牙与硬件,读数由你的代码传进来;
  • 用 iOS —— 当前只有 Android 实现。

解决什么问题

  1. 色温对了,颜色还是不对。 两颗都标 3000K 的灯珠,可能一颗偏绿、一颗偏粉,色温完全相同。只看色温会漏判,必须同时看 Duv(偏离黑体轨迹的方向与距离)和 Δu'v'(与目标色点的实际距离)。

  2. 一批货到底良率多少,说不清。 手工在 Excel 里挑,挑完还得数。本插件按色温档归集,直接给「3000K 档 35 颗、档内良率 94.3%」,并指出最远的那一颗。

  3. 判完不知道为什么。 结论不只是一个「不合格」,还会说「偏绿黄、超容差 1.47 倍」,指向荧光粉批次或点胶量,而不是让人对着数字猜。


与同类的边界

与本店已上线的插件不重叠:

已有插件 它做什么 本插件的区别
szhzy-spc-capability 按测量值算过程能力与判异 它管尺寸类特性的统计过程,本插件管色度坐标的色温与色差,算法与输入都不同
szhzy-tolerance-chain 按公差链算装配间隙 它算机械尺寸链,本插件算光学色度,单位与模型无关
szhzy-gs1-barcode 条码内容解析 它解条码字段,本插件解色坐标
szhzy-xlsx-import / xlsx-export 表格读写 本插件不解析 xlsx,吃的是色坐标数组或三列文本

与市场同类产品的差异:

  • 分光计自带的 PC 软件(如 GL Spectrosoft 一类):功能全,但绑定仪器、按套卖(千元级),只能在实验室电脑上跑,出来的是一堆曲线和坐标,还要人自己判。
  • 通用色彩 App(如 Tristimulus 一类,$4.99):面向设计师,做单色换算与 ΔE 对比,不管产线分档,也不出良率。
  • 免费在线色温计算器:只给一个色温数字,不给 Duv、不给容差判定,更不能批量。
  • Minitab / Excel 模板:要手工搭表,公式一改就错,且无法嵌进自己的 App。

本插件不做光谱分析、不做仪器驱动、不做色度图导出图片 —— 只把「色坐标 → 色温 + 色偏差 + 合格判定 + 分档良率」这一段做对,且结果可手算复核。


快速上手

1. 装插件

把 szhzy-led-chroma 放进项目的 uni_modules 目录,重新编译自定义基座。标准基座不含 UTS 插件,必须用自定义基座运行。

2. 判一颗

import { ledChroma } from '@/uni_modules/szhzy-led-chroma'

const r = ledChroma({
  x: 0.4287,          // 分光计读到的色坐标
  y: 0.4012,
  targetCct: 3000,    // 目标色温;也可以改传 targetX + targetY 指定目标色点
  limit: 0.005        // 容差:Δu'v' 半径,按客户要求填
})

if (r.ok) {
  r.cct        // 3021.4  相关色温
  r.duv        // 0.0018  Duv,正数偏绿、负数偏粉
  r.delta      // 0.0073  与目标色点的 Δu'v'
  r.ratio      // 1.47    用了容差的多少倍
  r.dirText    // 偏绿黄
  r.level      // fail / warn / pass
  r.hint       // 超出容差 1.5 倍,按不合格处理或转档降级使用
}

3. 分一批

const b = ledBatch({
  items: [
    { code: 'B2409-01', x: 0.4287, y: 0.4012 },
    { code: 'B2409-02', x: 0.4291, y: 0.4008 }
  ],
  bins: [
    { name: '2700K', minK: 2580, maxK: 2870, targetK: 2700 },
    { name: '3000K', minK: 2870, maxK: 3220, targetK: 3000 }
  ],
  targetCct: 3000,
  limit: 0.005
})

b.yieldPct   // 92.7  一次合格率
b.bins       // [{ name:'3000K', count:35, share:85.4, yieldPct:94.3 }, ...]
b.worstCode  // B2409-35  最远的一颗

每档带 targetK 时按自己的标称色温判定,不会把档与档之间的正常色温差算成超差。

4. 导出

ledExport({ items, bins, targetCct: 3000, limit: 0.005, kind: 'rows', fileName: '色度明细.csv' })
ledExport({ path: '/storage/emulated/0/Download/抽检.csv', bins, kind: 'bins', fileName: '分档汇总.csv' })

默认落应用外部私有目录,不需要任何存储权限;CSV 带 UTF-8 BOM,Excel 双击不乱码。


数据怎么给

三种方式,任选:

  1. items: [{ code, x, y }] —— 结构化数组,推荐;
  2. text —— 直接给文本,形如 编号,X,Y,也认 名称 / 色坐标X / 色坐标Y 这类中英文表头;
  3. path —— 给 CSV 路径或 content:// 授权 URI,编码可选(默认 UTF-8)。

分隔符支持逗号、制表符、分号、竖线;无表头时按「前两列是 x、y」读,两列纯数值时自动编号。


口径与公式(可手算核对)

色坐标换算

u = 4x / (-2x + 12y + 3),v = 6y / (-2x + 12y + 3)(CIE 1960 UCS); u' = u,v' = 1.5v(CIE 1976 UCS)。

相关色温

黑体轨迹用有理式近似(Kim 等人的拟合式),对轨迹点逐点求与实测点的距离,先 25 K 粗扫再区间收缩,得最近点色温。

校验:标准照明体 A 的色坐标 (0.44757, 0.40745) 算得 2856 K;D65 (0.31272, 0.32903) 算得 6504 K。

Duv

色点到轨迹的有符号距离,沿轨迹切线的法向投影。切向取「色温升高方向」,正值表示色点在轨迹上方(偏绿),负值表示下方(偏粉)。

校验:D65 的 Duv 为 +0.0032,照明体 A 的 Duv 为 0(它在轨迹上)。

容差判定

Δu'v' = √(Δu'² + Δv'²),ratio = Δu'v' / limit:

ratio 判定 处理
≤ 1.0 合格 正常出货
1.0 – 1.25 临界 复测后隔离或让步接收
> 1.25 超差 降档或不判合格

1.25 这条线是本插件对「压线」的处理约定,不是标准值;判定用的 limit 始终由你按客户要求给。

手算一遍(演示数据)

演示批次里那颗超差样点色坐标约 (0.4376, 0.4043),目标 3000 K:

  • 换算 u ≈ 0.2487、v ≈ 0.3448,u' ≈ 0.2487、v' ≈ 0.5172;
  • 轨迹最近点约 2924 K,Duv ≈ +0.0016(偏绿);
  • 与 3000 K 目标点距 Δu'v' ≈ 0.0073,容差 0.005,ratio ≈ 1.47 → 超差。

API

方法 用途 关键参数
ledChroma(options) 单点判定 x, y, targetCct 或 targetX+targetY, limit
ledCurve(options) 色度图数据 fromK, toK, step, targetCct, limit, segments, items
ledBatch(options) 批量分选 items 或 text/path, bins, targetCct, limit
ledParse(options) 只解析不算 text 或 path, charset
ledExport(options) 导出 CSV kind(rows / bins), fileName, dir, 其余同 ledBatch
ledDefaults() 默认参数 无

所有方法返回 { ok, code, message, ... },不抛异常。


导出的 CSV 列

明细:编号、色坐标X、色坐标Y、u'、v'、色温K、Duv、目标距离Δu'v'、容差倍数、偏差方向、色温档、判定。

分档汇总:色温档、下限K、上限K、数量、占比%、合格、临界、超差、档内良率%,末行为合计。


错误码

code 含义
BAD_POINT 缺 x 或 y,或不是数字
POINT_OUT_OF_GAMUT 色坐标不在色度图内(x、y 应为正数且 x + y < 1)
NO_TARGET 既没给 targetCct,也没给 targetX/targetY
NO_ROWS 没有解析到任何色坐标
BAD_RANGE 色度图色温范围不合法
FILE_NOT_FOUND / READ_FAILED 文件不存在或读失败
CHARSET_UNSUPPORTED 编码不支持
WRITE_FAILED / NO_OUTPUT_DIR 写文件失败或拿不到输出目录

能力边界与已知限制

  • 只处理色坐标,不处理光谱;CRI、TM-30、色品坐标图导出图片均不支持;
  • 不内置 SDCM / ANSI C78.377 椭圆表,容差是自定义的 Δu'v' 半径;
  • 色温适用范围 1000–25000 K,超出范围仍给结果但意义不大;
  • Duv 按最近点法向投影计算,与仪器厂商的 Duv 口径可能有小数点后第四位的差异,交接前建议用同一批样点对齐一次;
  • 单次批量建议不超过 5000 颗(纯 JS 循环,手机端 5000 颗约 1–2 秒)。

验证状态

项目 状态
纯逻辑回归测试 107 项全部通过(含标准照明体 A/D65/D50 还原、McCamy 交叉验证、Duv 方向、解析与分档边界)
UTS → Kotlin 编译 通过,产物 index.kt 与 classes.dex 已生成(见发布清单)
真机运行 未执行:测试机 adb devices 显示 unauthorized,无法安装自定义基座,也未做真机截图
市场截图 H5 渲染,页面已标注「示例数据」,不是真机截图
iOS / 鸿蒙 不支持

授权

普通授权与源码授权的范围见 license.md。购买前请确认上面的「能力边界」与「验证状态」,本插件按现状提供。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无系统权限。读取调用方用系统文件选择器交过来的文件(路径或 content:// 授权),写出走应用外部私有目录。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集、不上传任何数据,不访问网络,不写日志。色坐标只在内存中计算;明细由调用方决定是否落盘,默认写应用外部私有目录。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。