范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

DisplayP3vsRGB?如何正确使用色值?

  大家好,很高兴又见面了,我是" 前端进阶 ",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
  Display P3 vs sRGB?如何正确使用色值?前言
  Web 上使用的大多数颜色都是 sRGB 。 比如熟悉的 #rrggbb 、rgb(r, g, b) 语法指定的CSS颜色,其各个颜色分量以 [0, 255] 范围内的值表示。 例如,rgb(255, 0, 0) 是 sRGB 颜色空间中最饱和的纯红色。 但是 sRGB 中的颜色范围,即色域(Color Gamut或Color Space ),并不包含人类视觉系统可以感知的所有颜色,同时有些显示器可以产生更广泛的颜色范围。
  sRGB(Standard Red Green Blue)是由Microsoft影像巨擘共同开发的一种彩色语言协议,微软联合爱普生、HP惠普等提供一种标准方法来定义色彩,让显示、打印和扫描等各种计算机外部设备与应用软件对于色彩有一个共同的语言。
  Display P3,饱和度明显高于 sRGB 的色彩
  完全饱和的sRGB(左)和 Display P3(右)圆锥渐变。 在浏览器和支持 Display P3显示器上查看,右颜色会比左颜色浓
  如今,市场上有许多计算机、移动设备可以显示Display P3 色域的所有颜色,并且 Web 平台在过去几年中一直在发展,以允许开发者充分利用这些显示器。
  下图是在色度图上用三角形划出色彩空间所包含的色彩,明显能看出二者在包含色彩范围上的差别,即Display P3比sRGB范围更大。
  图片来自:https://www.zcool.com.cn/article/ZMTIyNjM2NA==.html
  WebKit 自 2016 年一直支持宽色图像和视频,去年成为第一个实现 CSS Color Module Level 4 中定义的新颜色语法的浏览器引擎,可以在给定的颜色空间中指定颜色。
  目前为止,也就HTML Canvas尚未支持广色域颜色。 2D Canvas API 在宽色域显示器普及之前就已引入,但是目前它只处理绘制和操作 sRGB 像素值。 最近一项使用其他颜色空间创建Canvas上下文的提案被添加到 HTML 标准中,目前 WebKit 已经提供支持,而本文就从这里展开。1.Display P3特征检测&浏览器支持
  可以使用一些技术来检测宽色域显示和画布支持是否可用。 1.1 显示器支持
  要检查 显示器 是否支持 Display P3 颜色需要使用色域媒体查询。 function displaySupportsP3Color() {     return matchMedia("(color-gamut: p3)").matches; }
  目前matchMedia方法已经受到大多数浏览器的原生支持。从下图可知,Chrome从9版本就已提供这个方法。
  matchMedia:媒体查询是否适用于文档的 API1.2 浏览器画布颜色空间支持
  要检查浏览器是否支持宽色域画布,可以创建一个Canvas并检查生成的颜色空间。 function canvasSupportsDisplayP3() {     let canvas = document.createElement("canvas");     try {         // 如果支持 colorSpace 选项,但不满足 Display P3 支持的系统要求(最低 macOS 或 iOS 版本)         // Safari 会抛出 TypeError。         let context = canvas.getContext("2d", { colorSpace: "display-p3" });         return context.getContextAttributes().colorSpace == "display-p3";     } catch {     }     return false; }
  如上所示,可以通过获取context.getContextAttributes().colorSpace == "display-p3"的值来判断浏览器是否支持display-p3。1.3 CSS Color Module Level 4 语法支持
  检查浏览器是否支持在画布上指定宽色域颜色,可以直接设置颜色并查看浏览器是否支持。 function canvasSupportsWideGamutCSSColors() {     let context = document.createElement("canvas").getContext("2d");     let initialFillStyle = context.fillStyle;     context.fillStyle = "color(display-p3 0 1 0)";     // 判断浏览器是否会忽略     return context.fillStyle != initialFillStyle; }2.在宽色域画布上绘制渲染上下文
  Canvas的getContext 方法接受一个选项来设置画布后备存储的颜色空间。 
  默认颜色空间是 sRGB(避免对现有内容进行颜色空间转换的性能开销),也可以使用display-p3。注意:可以使用任何受支持的 CSS 颜色语法指定填充和描边样式。let position = 0; for (let green of [1, 0]) {     for (let blue of [1, 0]) {         for (let red of [1, 0]) {             context.fillStyle = `color(display-p3 ${red} ${green} ${blue})`;            // 填充样式             context.fillRect(position, position, 40, 40);            // 填充样式             position += 20;         }     } }
  在 sRGB(左)和显示 P3(右)画布上用作填充样式的显示 P3 颜色。左侧的颜色被限制在 sRGB 色域内
  任何使用画布颜色空间之外的颜色绘图都将被限制,以使其处于色域中。 例如,在 sRGB 画布上用颜色 (display-p3 1 0 0) 填充矩形最终将使用完全饱和的 sRGB 红色。 同样,在 Display P3 画布上绘制颜色 (rec2020 0.9 0 0.9),在 Rec.2020 色彩空间中几乎全是洋红色,即使用相近颜色 (display-p3 1.0 0 0.923) 来填充,因为这是 Display P3 色域中最相似的。const COLORS = ["#0f0", "color(display-p3 0 1 0)"]; for (let y = 20; y < 180; y += 20) {     // 色域外采用相似颜色填充     context.fillStyle = COLORS[(y / 20) % 2];     context.fillRect(20, y, 160, 20); }
  sRGB(左)和Display P3(右)画布上交错的Display P3和sRGB条纹。因限制在色域内,两种绿色阴影在sRGB画布难区分
  广色域颜色可用于所有Canvas绘图基元,比如: 作为矩形、路径和文本的填充和描边 渐变节点 阴影颜色 3.sRGB 和 Display P3 中的像素操作
  getImageData 和 putImageData 可用于获取和设置宽色域画布上的像素值。 默认情况下,getImageData 将返回具有画布颜色空间中像素值的 ImageData 对象,但可以指定与画布不匹配的显式颜色空间,执行转换。let context = canvas.getContext("2d", { colorSpace: "display-p3" }); context.fillStyle = "color(display-p3 0.5 0 0)"; context.fillRect(0, 0, 100, 100);  let imageData;  // 获取画布颜色空间(显示 P3)中的 ImageData imageData = context.getImageData(0, 0, 1, 1); console.log(imageData.colorSpace);   // "display-p3" console.log([...imageData.data]);    // [128, 0, 0, 255]  // 显式获取 Display P3 中的 ImageData imageData = context.getImageData(0, 0, 1, 1, { colorSpace: "display-p3" }); console.log(imageData.colorSpace);   // "display-p3" console.log([...imageData.data]);    // [128, 0, 0, 255]  // 获取图像数据转换为sRGB imageData = context.getImageData(0, 0, 1, 1, { colorSpace: "srgb" }); console.log(imageData.colorSpace);   // "srgb" console.log([...imageData.data]);    // [141, 0, 0, 255]
  ImageData 构造函数同样采用带有 colorSpace 键的可选项对象。 let context = canvas.getContext("2d", { colorSpace: "display-p3" }); // 创建一个 ImageData 并用完整的 Display P3 黄色填充 let imageData = new ImageData(10, 10, { colorSpace: "display-p3" }); for (let i = 0; i < 10 * 10 * 4; ++i)     imageData.data[i] = [255, 255, 0, 255][i % 4]; context.putImageData(imageData, 0, 0);
  当使用不同颜色空间的颜色绘制形状时,ImageData 和目标画布颜色空间之间的任何不匹配都会导致 putImageData 执行转换并可能限制生成的像素。 4.序列化画布内容
  Canvas DOM 元素上的 toDataURL 和 toBlob 方法生成带有画布内容的光栅图像。const canvas = document.getElementById("canvas"); const dataURL = canvas.toDataURL(); // toDataURL canvas.toBlob((blob) => { /* … */ }, "image/jpeg", 0.95);  // JPEG at 95% quality
  在 WebKit 中,当在 Display P3 画布上调用时,这些方法会在生成的 PNG 或 JPEG 中嵌入适当的颜色配置文件,从而确保保留所有颜色范围。5.绘制宽色域图像
  与 putImageData 一样,drawImage 方法将在绘制颜色空间与画布颜色空间不同的图像时执行所需的任何颜色空间转换。
  putImageData(imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) // putImageData方法 drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) // drawImage方法
  img 引用的光栅图像使用的任何颜色配置文件,以及视频(无论是视频文件还是 WebRTC 流)引用的视频中的任何颜色空间信息,都将在绘制到画布时得到恰当处理。 这可确保在绘制到色彩空间与显示器(显示 P3 或 sRGB)相匹配的画布时,源图像/视频和画布像素看起来相同。6.总结
  本文只是告诉大家什么是Display P3?为什么要使用Display P3?因为笔者不是这方面的专家,很多内容也就浅尝辄止。但是文末的参考资料提供了大量优秀文档以供学习,如果有兴趣可以自行阅读。参考资料
  https://webkit.org/blog/12058/wide-gamut-2d-graphics-using-html-canvas/
  https://caniuse.com/?search=matchMedia
  https://baike.baidu.com/item/sRGB/1350619?fr=aladdin
  https://developer.aliyun.com/article/787589

西部排名大乱!3队争榜首,勇士第6,湖人冲前8,马刺抢走倒数第1NBA新赛季打到现在,已经进行了接近3分之1的赛程了,而在西部,由于强队表现不理想,各支黑马频出,导致排名大乱,竞争的也非常激烈!总得来说3队争榜首,勇士第6,湖人冲前8,马刺抢走复活远古病毒会威胁现代人类吗?专家解读来源环球时报环球时报报道记者樊巍英国科学杂志新科学家近日称,一支由俄罗斯法国和德国的科学家组成的科研团队,成功复活了在西伯利亚永久冻土层中发现的7种冰冻了数万年的病毒,其中最年轻的巴塞尔查货9,024双莆田鞋,阿迪耐克专家考虑退华,网友反馈惊人江苏网友正品耐克阿迪挣的是智商税,包括品牌溢价广告费等莆田鞋相当于只要了个成本价和人工费,而年轻人的眼睛都是雪亮的,自然会动脑子买东西!泉州网友今后蒲田系统点品牌,就叫蒲田系,我想下周大雪节气,建议少吃螃蟹和羊肉,多吃4样,暖手脚去寒凉人不管走到哪一步,总得找点乐子,想一点办法。是的,美食就是我找的乐子,想的办法!小谈食刻和你一起认真对待吃下的食物!导读今年的大雪节气在下周的周三,也就是12月7日。俗话说大者,盛想要手机用上五年不换,建议一步到位,目前这4款手机可以满足如果您喜欢,可以点击上面的关注二字。后续会为您提供更多有价值的内容。手机使用年限最能考验一个品牌的水准。想要手机用上五年不换,建议一步到位,目前这4款手机可以满足。第一款iPhonC罗和梅西谁能走的更远?梅西所在的阿根廷队和C罗所在的葡萄牙对,两队都取得两了连胜,提前从小组出线!那么梅西和C罗谁能走的更远呢?我个人认为要从一下三个方面来说,一是个人的战术地位,二是球队的整体势力,三倪倪de分享之香蕉泥面膜战胜过敏痘痘今天来说说我之前不知道是因为换季还是姨妈期,或者是有一天晚上我同时吃了羊肉牛肉生海鲜的原因,脸上长了很多小痘痘,美容师说是过敏痘痘,美容师帮我清理冻干粉等都没用,熟识多年的美容师给吃香蕉可帮助清洁牙齿,多吃生洋葱可预防蛀牙,还有哪些食品对牙齿有好处摘要保护好牙齿推荐多吃的几种食物香蕉洋葱大蒜奶酪茶叶芥末芹菜。口腔疾病与许多慢性病存在共同危险因素。例如,过量摄入高糖高脂肪高盐低纤维的食物,不仅与冠心病脑卒中糖尿病癌症肥胖有关,薄荷茶能缓解胃肠道不适?不知道小时候有没有这样的体验,当你吃不下东西或胃不舒服的时候,长辈们经常分发薄荷糖。对于他们来讲,这是传统治疗胃部不适最可靠的家庭疗法。下面我简单介绍一下其中的缘由吧。绿薄荷胡椒薄冠心病动脉粥样硬化和高脂血症患者膳食方案(建议收藏)1谷类摄入量(gd)250400选择品种标准粮(米面)杂粮减少避免膳食种类精粮(米面)糕点甜食油炸油煎食品2肉类摄入量(gd)75选择品种瘦肉牛肉羊肉,去皮禽类,鱼类减少避免膳食种靠香蕉发展到北美后花园的圣卢西亚,究竟是一个怎么样的国家前言圣卢西亚是北美洲上的一个米粒国家,位于东加勒比海向风群岛中部,一部加勒比海盗的大火让很多游客对这里都很好奇和向往。这个国家面积小,人口也不多,但这里的人均诺贝尔得主却是最高的,
互联网又裁员,2023届毕业生如何应对最难就业季?前程无忧职场导师Anmi目前国内大多数新闻媒体以及各互联网中小企业,知名企业都不断爆出裁员的新闻。金九银十季已经到来,2023届应届生如何在内卷中凸显优势,应对秋招?根据清华大学的雅生活服务参股成立城市服务公司,经营范围含物联网应用服务乐居财经邓如菲9月5日消息,雅生活智慧城市服务股份有限公司(以下简称雅生活服务)新增一则对外投资。企查查显示投资企业为广东雅生活风物城市服务有限公司,具体投资比例不明。广东雅生活风任正非破釜沉舟,华为不用光刻机造芯片,外媒痴人说梦在老美封锁打压之前,华为和荣耀就占据了国内一大半的市场份额。但随着老美多次修改芯片规则,台积电无法给华为代工芯片后,华为手机从此进入寒冬,被迫无奈之下只能断臂自救抛售荣耀。这也让华身价超1000亿,中国女首富换人,杨惠妍为什么会跌落?疫情2年多来,有些公司倒闭了,创始人破产了。有些公司市值大跌,创始人跌落了富豪榜。有些公司赚得盆满钵满,创始人身价也大涨。马斯克凭借着特斯拉的热销,市值的飙涨,坐稳了世界首富位置。叫嚣让中国付出代价,戴琪却成功卡住了美国经济的咽喉中美贸易大战,戴琪成为一匹黑马。她死死抱着特朗普时期的关税策略,谁说也不管用耶伦公开反对了多次,雷蒙多也公开提示了两次,甚至连拜登都多次明确想考虑取消对华加征关税。但是戴琪竟然以一中国老板在泰国我的员工,全是摸鱼冠军众所周知,泰国,是个(斋烟烟,淡定)的国度。当你的航班进入泰国领空那瞬间起,连呼吸都开始慢了。传送带旁,没人跟你抢行李,就算抢,他也抢不赢你。不管有啥事,泰国人就在路上慢悠悠地晃,要求中国销毁核武器以取悦美国的戈尔巴乔夫戈尔巴乔夫于8月30日去世了,引起了世界的舆论的一场不大不小的波澜,这条消息在中国上了热搜。戈尔巴乔夫对中国有特殊的意义,一方面他是社会主义苏联的最后一位领导人,中国与苏联原同为社鲍春来罕见亮相1生之敌是林丹,1生挚爱罗雪娟,年近四十仍单身为期一周的2022年世界羽毛球锦标赛在日本落下帷幕,中国羽毛球队整体成绩比较理想,但在男单项目上成绩一直不尽如人意。林丹退役之后,国羽在男单项目上就停步不前,甚至有退步的表现,尽管前皇马王牌悍将找到新东家!34岁仍是香饽饽3大劲旅错失传奇飞翼今年夏天,西甲豪门不仅送走了胖虎卡塞米罗,还送走了另一位巴西王牌悍将,他就是曾经被外界誉为足坛超级飞翼的马塞洛。马塞洛,今年34岁,从2007年加盟皇马至今,他已经在银河战舰效力了10,门框救险83分钟绝杀,武磊前东家掀翻西甲8冠王,赛季首胜西甲联赛8次冠军拥有者赛前排名第5的毕尔巴鄂竞技队迎来了西甲联赛第4轮的对决,他们本场比赛坐镇自己的主场PK赛前排名第15的武磊的前东家西班牙人队。毕尔巴鄂竞技队前3轮2胜1平状态世界轮联宣布取消巴西滑板世锦赛巴西方面称将坚持举办世界轮滑和滑板运动联合会(世界轮联)近日宣布将取消原计划今年10月在巴西举行的两项滑板世锦赛(街式碗池),但巴西方面随即发文称赛事仍将在排除世界轮联的情况下正常举行。世界轮联是国际