在 html 中用加色法混合顏色
概要
本文通過解決一個假想的問題介紹了 css screen 混合模式,並介紹瞭如何用 svg 濾鏡、canvas 2d、canvas webgl 實現相同的效果。
問題
下面的圖片演示三種顏色光疊加的效果,請在 html 中實現這種效果。
約定
詞語 | 指代 |
---|---|
混合 | blend |
加色 | additive color - 名詞 |
特性 | attribute,比如 <a id=1> ,說 id 是元素 a 的特性 |
透明度 | α、alpha |
偽輸入影象 | pseudo input image |
著色器 | shader |
著色器程式 | shader program |
xml 應用程式 | XML application |
chrome | google chrome 41 |
firefox | firefox developer edition 40 |
ie | internet explorer 11 |
3 個瀏覽器 | 上面 3 個版本的瀏覽器 |
opera 已經基於 webkit 了,所以未測試 opera,若在 chrome 中可用那我就認為在 opera 中也可用。
分析
當然可以用 photoshop 製作圖片,html 用 <img>
觀察重疊部分發現該部分的顏色不僅受自己的影響、還受它下面背景顏色的影響,重疊部分的顏色是自己的顏色和背景顏色混合的結果。換句話說,一個畫素繪製出來的顏色等於畫素顏色和背景畫素顏色的混合,即
這裡面 rgb(1, 0, 0)
、rgb(0, 1, 0)
、rgb(0, 0, 1)
,
重點:不同的
B 得到不同的C
不可行的方法
html 中經常用到下面 3 個方法,
- css opacity 屬性
- css rgba()/hsla() 顏色
- 用
<img>
引用帶 alpha 通道的影象
它們使用相同的混合函式,叫做 α 混合或簡單 α 複合,
下面給上面的式子代入幾組實際值。設 rgba(1, 0, 0, 1)
,rgb(0, 0, 1)
,它倆混合的結果不用計算都知道仍然是不透明紅,計算過程如下,
r = 1 x 1 + 0 x (1 - 1) = 1
g = 0 x 1 + 0 x (1 - 1) = 0
b = 0 x 1 + 1 x (1 - 1) = 0
紅藍得紅,混合失敗。另外一組,rgba(1, 0, 0, 0.5)
,rgb(0, 0, 1)
,有,
r = 1 x 0.5 + 0 x (1 - 0.5) = 0.5
g = 0 x 0.5 + 0 x (1 - 0.5) = 0
b = 0 x 0.5 + 1 x (1 - 0.5) = 0.5
要想讓得到的 rgb(0.5, 0, 0.5)
和 rgb(0, 1, 0)
的綠色混合以得到 rgb(1, 1, 1)
的白色,α 需要滿足下面的方程組,
上面的方程組無解,即無論如何設定 α 都無法通過 rgb(0.5, 0, 0.5)
和 rgb(0, 1, 0)
得到 rgb(1, 1, 1)
。
回過頭來觀察式子
可行的方法
如果可以自己逐一計算畫素的顏色,得出要求的效果自然不在話下。除了自己計算外,如果存在正好能夠實現要求效果的固定函式,則呼叫該函式也可以。
在 html 中處理顏色有 3 種工具,css、svg、canvas。
css
css 有個模組叫複合與混合,這個模組定義了若干固定函式,其中一個叫 screen,它的
相關推薦
在 html 中用加色法混合顏色
概要 本文通過解決一個假想的問題介紹了 css screen 混合模式,並介紹瞭如何用 svg 濾鏡、canvas 2d、canvas webgl 實現相同的效果。 問題 下面的圖片演示三種顏色光疊加的效果,請在 html 中實現這種效果。
資料結構__不含括號的加減乘除法混合運算
這個程式我一共寫了5個檔案,4個是標頭檔案,最後1個則是main函式的cpp檔案。 第一個檔名為head.h 用於包含一些基本的標頭檔案,如下所示: #pragma once #include<iostream> #include<stdlib.h> #inclu
混合顏色的色值計算公式
之前為了實現不同顏色液體混合的顏色變化效果,推敲得出一個計算公式。 兩種顏色混合後,混色的色值計算,RGB分別用這個公式計算:顏色A-(顏色A-顏色B)*(1-顏色A的百分比) 例如:綠和白混合,綠(192, 229, 112)70%,白(255, 255, 255)30%
在HTML中用js獲取通過GET、POST方法(就是在網址後加?a=b&c=d之類)傳過來的表單值
<script type="text/javascript"> //獲取指定form中的所有的<input>物件 function getElements(formId) { var form = document.
html中用href 實現點擊鏈接彈出文件下載對話框
就會 鏈接 pre html 支持 body 能夠 自帶 圖片 瀏覽器支持能夠打開的格式,他都會默認直接在線打開(比如word或圖片),不支持的格式,他就會彈出下載提示。最好是做成.rar格式、xlsx的文件。瀏覽器自帶下載功能。 <body> <
html頁面加載流程
使用 避免 doc 最好 時間 dom type css 下載 瀏覽器加載和渲染html的順序 1. IE下載的順序是從上到下,渲染(就是把請求的內容顯示到瀏覽器屏幕上)的順序也是從上到下,下載和渲染是同時進行的。 2. 在渲染到頁面的某一部分時,其上面的所有部分都已經下載
HTML添加樣式三種辦法
標題 charset html pac set wid lan document dev 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U
Html.EditorFor 加 htmlAttributes
htm col hat html new font pan span ever @Html.EditorFor(m => m.Name, new { htmlAttributes = new { @required = "true", @anotherAttribut
HTML頁面加載和解析流程
有一個 scrip isp epic api 需要 解析 pla script <link href="/Content/css/plugins/jqgrid/ui.jqgrid.css" rel="stylesheet" /><script src="~
兩種方法實現在HTML頁面加載完畢後運行某個js
功能性 下載 事件 兩種 一點 方法 實現 代碼 寬度 js方法: <script type="text/javascript"> window.onload=function(){ var userName="xiaoming"; alert(user
JavaScript Html頁面加載完成三種寫法
window blue log script onload document htm scrip javascrip //一、Html頁面加載完成的JS寫法 //1. $(function () { alert("窗體Html頁面加載完成方法一"); }); /
vue打包空白,圖片沒加載,背景顏色沒有渲染出來-配置秘訣
run config util CP ack round .com 開發 sets 找到config文件夾下的index.js文件修改一下位置 看清楚是 build(上邊還有個dev 是開發環境下的配置,不需要改動)下的 assetsPublicPath :將‘/’改為‘
CSS單位分析及CSS顏色表示法、顏色表(調色板)
不錯 設置字體大小 靈活 希望 這樣的 字體 使用 columns 分辨 CSS單位主要分析em、rem、fr這三個較難理解的單位吧,平常的px、%、cm那些就不談了嘛。 px在不同場景之下為同樣的值,我們把它稱作絕對單位,而em和rem受外部因素的影響下而改變,因此稱作相
CSS顏色表示法及顏色表
ima image bubuko 簡寫 alt http 顏色 表示法 src 顏色表示法: 1、顏色名表示,比如:red 紅色,gold 金色 2、rgb表示,比如:rgb(255,0,0)表示紅色 3、16進制數值表示,比如:#ff0000 表示紅色,這種可以簡寫
基於RGB差值法的顏色分割
主要思想來自顏色分類論文《Goal Evaluation of Segmentation Algorithms for Traffic Sign Recognition》 RGB空間是通常的初始的空間,如果簡單的分割過程是其目的,使用RGB空間是比較好的選擇。然而,三個顏色之間的高相關性元件和光
在html中用js代替${pagecontext.request.getcontextpath}
在html中用js代替${pagecontext.request.getcontextpath}這樣就不用使用jsp了 var pathArray = window.location.pathname.split('/'); var secondL
BootStrap-CSS樣式_排版_強調(斜體加粗對齊顏色)
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" c
html中用css定義div的邊框樣式
我們都知道html中div定義的是一個塊,有時候我們需要給這個塊增加一些邊框來達到我們所需要的要求。 1.如何定義邊框 如下所示我用css定義了這個邊框的屬性 <style> .c{ width:100px; height:100px; bor
『最小生成樹』Kruskal演算法——加邊法 (並查集優化 + C++語言編寫 + 例題)
『演算法原理』 在一個連通網的所有生成樹中,各邊的代價之和最小的那顆生成樹稱為該連通網的最小代價生成樹(Minimum Cost Spanning Tree),簡稱最小生成樹(MST)。 Kruskal演算法之所以叫加邊法,就是因為其本質
光與色的故事--顏色模型淺析
光與色的故事 ---顏色模型淺析 1.光的故事 光是一種電磁波,同聲波相類似,包含了不同頻率分量。不同的是,電磁波能夠在真空中傳播。電磁波通常是由一種頻率或多種頻率構成。比如非常高頻率的電磁波構成了微波;非常低頻率的構成了無線