Hex hsl 轉換 php,關于 RGB,HEX,HSL 顏色相互轉換

最近一段時間在折騰一個微信在線編輯器的項目,使用 UEditor 進行二次開發。

關于 UEditor 的定制,用到的都太粗淺,官方文檔上都能找得到。主題使用的樣式表是 ueditor.css 而不是ueditor.min.css,定制主題要注意這一點。而對整個項目來講,感覺難度最大的,應該是素材換色的功能。

牽扯到

網上找到了 張鑫旭 大神以前寫的代碼,改了bug 稍微改寫了一下。

// HEX 顏色正則

var hexReg = /^\#([0-9a-f]{3}|[0-9a-f]{6})$/gi;

// RGB 轉 HEX

String.prototype.colorHex = function () {

var that = this;

if (/^(rgb|RGB)/.test(that)) {

var aColor = that.replace(/(?:\(|\)|rgb)*/gi,'').split(',');

var strHex = '#';

for (var i = 0; i < aColor.length; i++) {

var hex = Number(aColor[i]).toString(16);

hex = hex.length == 1 ? "0" + hex : hex

strHex += hex

}

return strHex.toUpperCase();

} else if (hexReg.test(that)) {

var aNum = that.replace(/#/, '').split('');

if (aNum.length === 6) {

return that.toUpperCase();

} else if (aNum.length === 3) {

var numHex = '#';

for (var i = 0; i < aNum.length; i += 1) {

numHex += (aNum[i] + aNum[i])

}

return numHex.toUpperCase();

}

}

}

// HEX 轉 RGB

String.prototype.colorRgb = function () {

var sColor = this.toLowerCase();

if (sColor && hexReg.test(sColor)) {

if (sColor.length === 4) {

var sColorNew = '#';

for (var i = 1; i < 4; i += 1) {

sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));

}

sColor = sColorNew

}

//處理六位的顏色值

var sColorChange = [];

for (var i = 1; i < 7; i += 2) {

sColorChange.push(parseInt('0x' + sColor.slice(i, i + 2)))

}

return 'rgb(' + sColorChange.join(', ') + ')';

} else {

return sColor;

}

}

關于色彩空間中的

概念問題我就不說太多了,HSB 與 HSV 是同一個概念,只是叫法不同。PhotoShop 的調色板里看到的就是HSB顏色模型。

在 CSS 中,使用的是

兩個模型中,H (Hue) 都是色相的意思,取值范圍為 0 – 360 指的是圓心角,每個角度代表一種顏色;

S (Saturation) 代表飽和度,但在兩種模型中兩個飽和度的定義并不一樣,但可以相互轉換,取值范圍都是 0 – 1 (在 CSS 中,要寫成百分數形式 ;

在 L(Lightness) 代表?亮度,是作為“白的量”來理解的;

而在 HSB 模型中,B?(Brightness) 指的是?明度,被認為是“光的量”,可以是任何顏色。

下面的代碼統一用原型鏈改寫了一下,

// HSL 顏色正則

var hslReg = /^hsl\(.+?\)$/gi;

// RGB 轉 HSL

String.prototype.rgb2Hsl = function () {

var c = this.colorHex();

var r = parseInt(c.substring(1, 3), 16) / 255;

var g = parseInt(c.substring(3, 5), 16) / 255;

var b = parseInt(c.substring(5, 7), 16) / 255;

var max = Math.max(r, g, b),

min = Math.min(r, g, b);

var h, s, l = (max + min) / 2;

if (max == min) {

h = s = 0; // achromatic

} else {

var d = max - min;

s = l > 0.5 ? d / (2 - max - min) : d / (max + min);

switch (max) {

case r:

h = (g - b) / d + (g < b ? 6 : 0);

break;

case g:

h = (b - r) / d + 2;

break;

case b:

h = (r - g) / d + 4;

break;

}

h /= 6;

}

h = Math.round(h * 360)

s = Math.round(s * 100)

l = Math.round(l * 100)

return 'hsl(' + h + ', ' + s + '%, ' + l +'%)';

}

// HSL 轉 RGB

String.prototype.hsl2Rgb = function () {

var r, g, b;

var o = this.replace(/hsl\(|\)|\s/gi, '').split(',');

h = parseInt(o[0]) / 360;

s = parseInt(o[1]) / 100;

l = parseInt(o[2]) / 100;

if (hslReg.test(this)) {

if (s == 0) {

r = g = b = l; // achromatic

} else {

var hue2rgb = function hue2rgb(p, q, t) {

if (t < 0) t += 1; if (t > 1) t -= 1;

if (t < 1 / 6) return p + (q - p) * 6 * t;

if (t < 1 / 2) return q;

if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;

return p;

}

var q = l < 0.5 ? l * (1 + s) : l + s - l * s;

var p = 2 * l - q;

r = hue2rgb(p, q, h + 1 / 3);

g = hue2rgb(p, q, h);

b = hue2rgb(p, q, h - 1 / 3);

}

return 'rgb(' + Math.round(r * 255) + ', ' + Math.round(g * 255) + ', ' + Math.round(b * 255) + ')';

}

END.

關于 RGB,HEX,HSL 顏色相互轉換

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370989.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370989.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370989.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用inetaddress測試目標可達性_PDPS軟件機器人虛擬仿真:Smart Place功能介紹與使用方法...

概述對于機器人工作站或生產線的虛擬仿真&#xff0c;很大一部分的作用是找出機器人與工裝夾具等外圍設備的最佳布局位置。市面上大多數的工業機器人虛擬仿真軟件都有這種專門用于檢測機器人與外圍設備之間最佳布局位置的功能&#xff0c;比如DELMIA軟件中的“Auto Place”功能…

JAVA基礎3——常見關鍵字解讀(1)

常見的JAVA中的關鍵字 static static靜態變量 靜態變量&#xff1a;使用static關鍵字定義的變量。static可以修飾變量和方法&#xff0c;也有static靜態代碼塊。被static修飾的成員變量和成員方法獨立于該類的任何對象。也就是說&#xff0c;它不依賴類特定的實例&#xff0c;被…

PostgreSQL PL / java簡介

現代數據庫允許以多種語言編寫存儲過程。 一種常見的實現語言是java.NB&#xff0c;本文討論了PostgreSQL特定的Java實現。 其他數據庫的詳細信息會有所不同&#xff0c;但是概念是相同的。 PL / Java的安裝 在Ubuntu系統上安裝PL / Java很簡單。 我將首先創建一個新模板templ…

強連通分量 圓桌騎士

題目描述 圓桌騎士是一個非常吸引人的職業。因此&#xff0c;在最近幾年里&#xff0c;亞瑟王史無前例的擴招圓桌騎士&#xff0c;并不令人驚訝。現在這里有許多圓桌騎士&#xff0c;每個圓桌騎士都收到一份珍貴的邀請函&#xff0c;被邀請去英靈殿圓桌。這些騎士將要環繞著坐在…

微信小程序echarts層級太高

項目中因為需求&#xff0c;底部的tab導航欄是自己寫的&#xff0c;在開發者工具中一切正常&#xff1b;但是在真機上頁面滑動時&#xff0c;echarts的層級比tab高&#xff0c;調過兩者的z-index后仍然如此。 經過查找后發現cover-view和cover-image替換tab的view后&#xff0…

php解密 碼表,php拼音碼表的生成

php拼音碼表的生成發布于 2014-09-07 11:12:52 | 90 次閱讀 | 評論: 0 | 來源: 網友投遞PHP開源腳本語言PHP(外文名: Hypertext Preprocessor&#xff0c;中文名&#xff1a;“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點&#xff0c;入門門檻…

angular js 使用pdf.js_排名靠前的幾個JS框架發展趨勢和前景

轉載自&#xff1a;葡萄城官網&#xff0c;葡萄城為開發者提供專業的開發工具、解決方案和服務&#xff0c;賦能開發者。原文出處&#xff1a;https://blog.bitsrc.io/top-5-javascript-frameworks-past-present-and-future-8b6fda39de02隨著信息技術領域的發展&#xff0c;企業…

工廠設計模式案例研究

我有一份工作來檢查我們的項目代碼質量。 如果我在項目中發現任何障礙&#xff0c;必須將其報告給我的團隊負責人。 我發現了很多漏洞&#xff0c;我認為可以在博客上進行討論。 不是嘲笑作者&#xff0c;而是一起學習和改進自己。 像這段代碼一樣&#xff0c;這是我在我們的代…

【javascript】DOM操作方法(3)——document節點屬性

document.doctype //document.documentElement //來獲取html元素 document.defaultView //返回document對象所在的window對象 document.body //返回當前文檔的<body>節點 document.head //返回當前文檔的<head>節點 document.activeElement //返回當前文…

debian dhcp服務啟動不了_DHCP服務器配置

DHCP &#xff1d; Dynamic Host Configuration Protocol 基于TCP/IP&#xff0c;用于動態配置工作站網絡接口&#xff0c;使工作站的網絡接口管理自動化。DHCP服務器軟件dhcpd網站&#xff1a;http://www.isc.org安裝方法&#xff1a;#tar -zxvf dhcp-4.0.0.tar.gz#cd dhcp-4.…

澤西島的JSON模式生成

因此&#xff0c;在上一篇文章中&#xff0c;我討論了一個允許在WADL中使用JSON-Schema的建議&#xff0c;這篇文章探討了如何使它與最近構建的Jersey一起使用。 在1.16發布之前&#xff0c;您將必須下載/參考1.16SNAPSHOT。 如果您使用的是Maven&#xff0c;那么假設您已經有…

C++map類型 之 簡單介紹

一&#xff1a;map的前世今生&#xff08;1&#xff09;從關聯容器與順序容器說起。關聯容器通過鍵&#xff08;key&#xff09;存儲和讀取元素。而順序容器則通過元素在容器中的位置順序存儲和訪問元素&#xff08;vector,queue,stack,list等&#xff09;。關聯容器&#xff0…

MySql Socket 完成數據庫的增查Demo

需求: 利用MySql數據庫結合前端技術完成用戶的注冊(要求不使用Web服務技術),所以 Demo采用Socket技術實現Web通信. 第一部分:數據庫創建 數據庫采用mysql 5.7.18, 數據庫名稱為MyUser, 內部有一張表 user.字段有 Id,UserName,Psd,Tel 第二部分:數據庫連接與Socket通信 創建控…

oracle導數卡死,oracle-審計導數

1、因審計需求&#xff0c;需要將MySQL、Oracle數據庫中需要的表數據導入到SqlSERVER進行審計。2、之前的方法&#xff1a;A. oracle組將表dump下來&#xff0c;進行壓縮&#xff0c;傳送到oracle導數服務器(中轉服務器)&#xff0c;再進行還原&#xff0c;然后修改表結構&…

蘋果桌面主題_看膩了手機自帶的桌面主題,試試這個

在這個看臉的時代&#xff0c;顏值似乎越來越重要了。尤其是我們每天都要看到的手機桌面&#xff0c;如果它的顏值好一點&#xff0c;也許我們的心情會更好&#xff0c;所以有不少人都用手機自帶的主題來美化桌面&#xff0c;但是對于喜歡個性的我們&#xff0c;手機自帶的主題…

Java SE 11:推動Java向前發展

介紹 在我看來&#xff0c;這篇文章提出了Java語言應該如何發展以保持其作為首選語言的地位。 它還提供了一些我喜歡但有時&#xff08;可能永遠不會&#xff09;成為Java一部分的功能&#xff0c;由于我將要解釋的某些原因&#xff0c;這些功能有時我已經愛上了。 我真的很想…

python之property屬性

Property的概念&#xff1a;property是一種特殊的屬性&#xff0c;訪問它時會執行一段功能&#xff08;函數&#xff09;&#xff0c;然后返回值。 import mathclass Circle:def __init__(self,radius):#園的半徑radiusself.radiusradiusproperty#areaproperty(area)def area(s…

Hexo使用細節及各種問題

解決markdown圖片不顯示(返回403 forbidden)、添加本地圖片無法顯示、修改文章page模板、同時部署發布同步到多個倉庫站點(Github、coding、gitee 碼云) 圖片不顯示 在使用過程中&#xff0c;會發現有的引用圖片無法顯示的問題。但是如果直接復制圖片地址到瀏覽器打開的話顯示…

oracle的等保,Oracle等保測評相關指令

Oracle用戶管理:SQL*Pluscreate user 用戶名 identified by 密碼; //創建用戶grant 權限(dba管理員&#xff0c;resource普通用戶&#xff0c;connect訪客) to 用戶名; //授權drop user 用戶名 cascade; //刪除用戶&#xff0c;加cascade會把用戶創建的所有東西刪除Linux設置用…

Spring3 + JPA2 + Java EE6 App Server =配置混亂

Spring很棒&#xff0c;JavaEE6很棒&#xff0c;最新的JavaEE6 Application服務器也很棒。 這篇文章不是Spring Vs JavaEE6上的專欄文章&#xff0c;而是我在JBoss AS-7.1 App Server上移植Spring3 JPA2&#xff08;Hibernate&#xff09;應用程序的經驗。 我的應用程序要求非…