网站首页 > 技术文章 正文
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。
任何一个和用户有交互的产品,都离不开颜色,你是否在设计稿或代码中或者任何一个标识颜色的地方看到过,比如:#FF00FF、#169、#CCFF00FF。
先介绍下RGB的基本原理,RGB是Red、Green、Blue三种颜色的缩写,叫做三原色(小学的图画课应该是学过的)。三种颜色以最大亮度进行混合的话,会变成白色,哇,好神奇。
整个理论以下图所示,假设在一个没有一点光的小黑屋里面,墙面展示为黑色,打开三束灯,分别红,绿,蓝,中间三种颜色交叉的地方,就形成了白色。也就是这些光会叠加产生效果,并混合成新的颜色。
当前无论手机还是计算机,究竟支持多少种颜色呢?答案是都达到了真彩色的标准,也就是支持1670w种颜色,已经超过了人眼能够分辨颜色的极限了,1670w这个数字怎么来的,一会儿我们一起推算。
一般一种颜色用8bit表示,也就是01010101这样8个二进制数,2的8次方是256,所以一个颜色就分为256级,从0到255,共256级,0表示黑色(红灯还没打开),255标识红色强度最大(红灯已全部打开),这个时候255对应的二进制为11111111(你如果懂二进制的知识的话,应该很好看懂),这样RGB三种颜色分别用8为表示的话,一共24位表示一个颜色,例如111111111111111111111111,表示了RGB都是255级的亮度,也就是表示了上图当中最中间交叉的那个部分,也就是表示了白色。
但是二进制表示计算机读起来比较容易,因为计算机处理的就是01的字串,但是人可读性并不好,所以人类用16进制来标识二进制,会所见01字串的长度,16进制的意思就是逢16进1,但是我们的阿拉伯数字最大是9,那对于10到15的六个数字分别用A,B,C,D,E,F来表示,1111应该用F来表示,所以白色用16进制表示为FFFFFF,在web开发或设计中,前面加上#号标识颜色,所以你就看到了文章开头介绍的颜色表示法#FFFFFF这样的形式,在CSS设计中,如果FF这样重叠的数字,可以再进行一次缩减标识为#FFF,类似#CCFF00FF前面的CC是表示的Alpha通道,即标识的透明度。
RGB三种颜色分别有256级亮度,那三种颜色的组合数就是256*256*256=16777216,也就是2的24次方,所以分别用8位RGB来表示的颜色数量公用1670w种颜色,足以覆盖人类眼睛的辨识程度。
再介绍下经常提到的位深度的概念,在windows系统中,右键属性一张图片,看详细信息,如下图:
这里面的位深度就是指一张图片内的一个像素是用多少位来表示的,如我们刚才介绍的RGB分别是8位,位深度就是24,这种图片叫做RGB24,当然这个只是指RGB总共的二进制位数,也有可能是32位叫做RGB32,除了RGB的24位,剩余的8为表示Alpha通道,也就是透明信息,当前的交互和动画展现,如果没有Alpha,那做起来应该都是比较生硬的,一般都会用Alpha表示渐隐渐显的效果,在图片中是用来将图片中层叠的概念表达的更加清楚。
一般有如下几种RGB格式,包括RGB565,RGB24,RGB32,ARGB8888,最后一种的A表示Alpha,跟刚才介绍的RGB32差不多一个意思。
像RGB565这种用16位表示一个颜色,那只能表示2的16次方,表达出65536种颜色,但是好处是非常节省内存(因为一个像素只用32位一半的数据就能存储了),但是会损失图片的清晰度,一般用于纯色图片或这本身颜色就比较少的图片,会大幅减少内存的占用。
本篇基本介绍了计算机中三原色的原理,及你见过的一些陌生的颜色值的表示方法,几个简单的推理方法,介绍了下位深度的概念。当内存和图片质量发生冲突时,可考虑设计上用纯色或极其简单的颜色来设计,然后将图片用更少的位数表达,这样会大幅节省内存,前提是设计上能够保持简洁并能够达到设计效果。
再跟大家算个帐,一张图片假设是1920*1080的大小,那这张图片至少要占用1920*1080*4字节的内存,也就是4Mb,也即一个带有alpha通道的图片,都会是这个大小,唯一有处理空间的是没有alpha,并且颜色比较简单的图,可以用RGB565来表达,这样可以减小一半的内存占用,对于程序性能来说,是不小的提升,难道内存,速度,性能指标不是产品设计当中的重要一环和重要的考量指标吗?
颜色知识十分简单,希望以后不要对颜色感觉到任何陌生。
#专栏作家#
给产品经理讲技术,微信公众号(pm_teacher),人人都是产品经理专栏作家。资深程序猿,专注客户端开发若干年,对前端、后台技术略懂,热衷于对新的科技领域的探索。
猜你喜欢
- 2025-07-02 筛选了100个配色工具后,我挑出了这25个
- 2025-07-02 好程序员:前端JavaScript全解析——Canvas绘制形状(上)
- 2025-07-02 用 Cursor 开发 10 +项目后,汇总了40 多条提示词
- 2025-07-02 Piny:代码编辑界的“视觉革命”,让前端开发从此“看得见”!
- 2025-07-02 印刷色彩特性曲线是什么?有什么用?怎么获取?
- 2025-07-02 前端最常用的25个正则表达式,代码效率提高 80%
- 2025-07-02 让 浏览器智能选择颜色?CSS 这个新功能太聪明了!
- 2024-10-08 HTML常用全部代码,你懂,你不想成功都难
- 2024-10-08 纯CSS文字聚光灯效果~#web前端 聚光灯wps
- 2024-10-08 css基础必备-元素背景,前端小白一看就会
你 发表评论:
欢迎- 07-08记oracle日志挖掘实操&查询归档不正常增长情况(一)
- 07-08Oracle 伪列!这些隐藏用法你都知道吗?
- 07-08orcl数据库查询重复数据及删除重复数据方法
- 07-08重大故障!业务核心表被truncate删除,准备跑路……
- 07-08oracle数据恢复—oracle执行truncate命令误删除数据的数据恢复
- 07-08Oracle-rac 修改scanip(oracle 修改sequence cache)
- 07-08ORACLE RAC CDB和PDB切换(oracle数据库rac切换)
- 07-08Oracle rac haip作用(oracle rac的典型特征)
- 596℃几个Oracle空值处理函数 oracle处理null值的函数
- 589℃Oracle分析函数之Lag和Lead()使用
- 576℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 573℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 569℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 562℃【数据统计分析】详解Oracle分组函数之CUBE
- 549℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 542℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- 记oracle日志挖掘实操&查询归档不正常增长情况(一)
- Oracle 伪列!这些隐藏用法你都知道吗?
- orcl数据库查询重复数据及删除重复数据方法
- 重大故障!业务核心表被truncate删除,准备跑路……
- oracle数据恢复—oracle执行truncate命令误删除数据的数据恢复
- Oracle-rac 修改scanip(oracle 修改sequence cache)
- ORACLE RAC CDB和PDB切换(oracle数据库rac切换)
- Oracle rac haip作用(oracle rac的典型特征)
- 新手小白怎么学UI设计 推荐学习路线是什么
- 超实用!0基础UI设计自学指南(0基础学ui设计好就业吗)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- 前端获取当前时间 (50)
- 前端接口 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)