尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
为 AI 配色提案保留像素账本
把图片交给 AI请它总结“这是什么配色”会得到很有气氛的词。可如果后续要生成主题变量仍需要一个稳定的数值底座到底哪些颜色出现了多少次我会先从像素提取少量代表色再让模型帮忙命名与讨论用途。八叉树要合并颜色不能合并掉像素八叉树把 RGB 每一位组合成 0 到 7 的分支。每插入一个像素沿途节点都累加数量与通道总和。减少颜色时折叠一个节点的子树用该节点累计的均值作为代表色。无论树怎样折叠输出色桶的数量总和都应该等于输入像素数。这个不变量很重要。若把根节点或只剩一个孩子的节点排除在归并之外某些实现会把未统计的内部节点当成叶子返回一张看似正常、实际上丢了像素的调色板。五个测试像素——黑、白、红、白、黑——足够暴露这类问题。明确“最多”不承诺“恰好”下面每次折叠最深层的一个节点优先处理样本少的节点。它是教学用的八叉树量化不是最小感知误差算法一次折叠可能跨过目标数量所以maxColors2可能只剩一个颜色。若产品必须恰好给出两色需要另一种拆分或聚类策略不能偷偷复制色桶凑数。Nano Banana 2.1 的图像编辑说明适合了解后续参考图工作流但提取的 RGB 也不能保证生成图严格遵守。应把色值、占比、命名提案分开让模型解释色彩关系不替代原始统计。运行node palette.js验证像素总数守恒、色数上限、单色输入和重复像素加权。示例直接使用 RGB 数组未测试图片解码、透明合成、浏览器或真实模型颜色距离也没有做感知空间校准。保留这份账本创意建议才有可以回头核对的依据。可独立运行的核心例子function palette(pixels,maxColors) { if(!Number.isInteger(maxColors)||maxColors1||!pixels.length)throw Error(数量无效); const nodedepth({depth,count:0,sum:[0,0,0],children:new Map()}); const rootnode(0); for(const rgb of pixels) { if(rgb.length!3||rgb.some(v!Number.isInteger(v)||v0||v255))throw Error(RGB无效); let nroot; for(let depth0;depth8;depth) { n.count;rgb.forEach((v,i)n.sum[i]v); if(depth8)break; const bit7-depth,k((rgb[0]bit1)2)|((rgb[1]bit1)1)|(rgb[2]bit1); if(!n.children.has(k))n.children.set(k,node(depth1)); nn.children.get(k); } } const leavesnn.children.size?[...n.children.values()].flatMap(leaves):[n]; while(leaves(root).lengthmaxColors) { const candidates[]; function visit(n) { if(!n.children.size)return; if([...n.children.values()].every(c!c.children.size))candidates.push(n); else n.children.forEach(visit); } visit(root); candidates.sort((a,b)b.depth-a.depth||a.count-b.count); if(!candidates.length)throw Error(归并无进展); candidates[0].children.clear(); } return leaves(root).map(n({rgb:n.sum.map(vMath.round(v/n.count)),count:n.count})); } const px[[0,0,0],[255,255,255],[255,0,0],[255,255,255],[0,0,0]]; const outpalette(px,2); if(out.length2||out.reduce((s,c)sc.count,0)!5)throw Error(像素丢失); const onepalette([[12,34,56],[12,34,56]],8); if(one.length!1||one[0].count!2||one[0].rgb.join(,)!12,34,56)throw Error(单色失败); const weightedpalette([[0,0,0],[0,0,0],[255,255,255]],1)[0]; if(weighted.rgb[0]!85||weighted.count!3)throw Error(加权错误); console.log(JSON.stringify(out));
RELATED

相关推荐

三菱CNC数据采集C#源码Demo:EZSocket、缓冲落库与断线重连

三菱CNC数据采集C#源码Demo:EZSocket、缓冲落库与断线重连

简介:面向三菱CNC数采开发与自动化调试场景的C#示例工程,适合具备一定C#基础、希望将机床数据接入上位机或业务系统的工程师参考,也可作为自动化技术爱好者学习数控通讯流程的入门材料。内容围绕与三菱数控系统建立连接、采集加工参数与设备状…

📅 2026/10/28 0:34:02
营销技能体系全解析:从用户洞察到数据复盘的实战方法论

营销技能体系全解析:从用户洞察到数据复盘的实战方法论

做营销这些年,我最常被问的问题不是“怎么做活动”,而是“marketing skills到底包含哪些?为什么学了很多课,还是觉得不会做营销?”说实话,“marketing skills”这个词看着宽泛,但拆开看其实就是…

📅 2026/10/28 0:34:02
GAN中的流形几何学:从理论到实践

GAN中的流形几何学:从理论到实践

1. 项目概述:当几何学遇上生成对抗网络第一次看到"流形"这个概念是在研究生时代的微分几何课上,教授用一张揉皱的纸比喻流形空间——局部看似平坦,全局却可能极度扭曲。十年后,当我开始研究GAN的训练不稳定性问题时&…

📅 2026/10/28 0:34:02
MORE NEWS

更多资讯

📰

Cindy 开发工作流实战:worktree 会话契约、DCO 门禁与 PR Review 口径

人工智能AI Agent代码智能体大模型AI 技能Agent 记忆工具调用MCP Clients 【免费下载链接】cindy Consider it done. The open-source AI agent that works out of the box 想到,就能做到。开源、开箱即用的 AI Agent。 项目地址: https://gitcode.com/…

📰

PowerRename 批量重命名文件:搜索替换、正则一步到位,先预览后执行

PowerRename 批量重命名文件:搜索替换、正则一步到位,先预览后执行 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHu…

📰

OpenCore Legacy Patcher 四阶段实操:给老 Mac 装新 macOS 的完整流程

OpenCore Legacy Patcher 四阶段实操:给老 Mac 装新 macOS 的完整流程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher 是…

📰

lottie-web:让 After Effects 动画在 Web 端原生渲染,10 分钟上手

lottie-web:让 After Effects 动画在 Web 端原生渲染,10 分钟上手 【免费下载链接】lottie-web Render After Effects animations natively on Web, Android and iOS, and React Native. http://airbnb.io/lottie/ 项目地址: https://gitcode.com/gh_m…

📰

stack、queue与priority_queue的用法解析与模拟实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

【09】C++实战篇——C++ 生成静态库.lib 及 C++调用lib,及实际项目中的使用技巧

文章目录 1 C++ 静态库.lib 生成 1.1 静态库lib的生成方法和使用方法 1.2 创建静态库项目 1.3 编写.h 和 .cpp文件 1.4 设置 及 生成 DLL 2 调用 C++ 静态库lib 2.1 新建LIBtest及测试代码 2.2 静态库配置 及代码调用测试 3 实际项目中的使用技巧、及通用设置 3.1 设置lib输出路…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬