noire

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 20, 2019 License: MIT Imports: 4 Imported by: 17

README

Noire GoDoc Coverage Status Build Status Go Report Card

支援 RGB、HSL、HSV、CMYK、Hex、HTML 顏色代碼進行轉換與顏色(亮度、飽和度…等)編輯的套件。

這個套件需要至少 Go 1.10,因為會使用到 math.Round 四捨五入函式。

色彩演算法

Noire 能夠將下列顏色互相轉換。

  • RGB
  • CMYK
  • HSL
  • HSV
  • Hex
  • HTML

效能比較

測試規格:
4.2 GHz Intel Core i7 (8750H)
32 GB 2666 MHz DDR4

goos: windows
goarch: amd64
pkg: github.com/teacat/noire
BenchmarkCMYKToRGB-12         	100000000	        22.5 ns/op	       0 B/op	       0 allocs/op
BenchmarkRGBToCMYK-12         	50000000	        26.9 ns/op	       0 B/op	       0 allocs/op
BenchmarkRGBToHSL-12          	50000000	        26.6 ns/op	       0 B/op	       0 allocs/op
BenchmarkHSLToRGB-12          	100000000	        17.2 ns/op	       0 B/op	       0 allocs/op
BenchmarkHSVToRGB-12          	100000000	        15.3 ns/op	       0 B/op	       0 allocs/op
BenchmarkRGBToHSV-12          	50000000	        29.3 ns/op	       0 B/op	       0 allocs/op
BenchmarkRGBToHex-12          	20000000	        85.4 ns/op	      32 B/op	       4 allocs/op
BenchmarkHexToRGB-12          	50000000	        36.1 ns/op	       8 B/op	       1 allocs/op
BenchmarkHTMLToRGBName-12     	20000000	       118 ns/op	      40 B/op	       3 allocs/op
BenchmarkHTMLToRGBHex-12      	30000000	        41.0 ns/op	       8 B/op	       1 allocs/op
BenchmarkRGBToHTML-12         	20000000	       103 ns/op	      32 B/op	       4 allocs/op
BenchmarkMix-12               	 5000000	       292 ns/op	     112 B/op	       5 allocs/op
BenchmarkHue-12               	50000000	        33.5 ns/op	       0 B/op	       0 allocs/op
BenchmarkSaturation-12        	50000000	        33.7 ns/op	       0 B/op	       0 allocs/op
BenchmarkLightness-12         	50000000	        33.7 ns/op	       0 B/op	       0 allocs/op
BenchmarkAdjustHue-12         	20000000	        79.0 ns/op	      32 B/op	       1 allocs/op
BenchmarkLighten-12           	20000000	        78.2 ns/op	      32 B/op	       1 allocs/op
BenchmarkDarken-12            	20000000	        77.8 ns/op	      32 B/op	       1 allocs/op
BenchmarkSaturate-12          	20000000	        74.1 ns/op	      32 B/op	       1 allocs/op
BenchmarkDesaturate-12        	20000000	        79.0 ns/op	      32 B/op	       1 allocs/op
BenchmarkGrayscale-12         	20000000	        71.8 ns/op	      32 B/op	       1 allocs/op
BenchmarkComplement-12        	20000000	        79.9 ns/op	      32 B/op	       1 allocs/op
BenchmarkTint-12              	30000000	        40.8 ns/op	      32 B/op	       1 allocs/op
BenchmarkShade-12             	30000000	        40.9 ns/op	      32 B/op	       1 allocs/op
BenchmarkInvert-12            	50000000	        24.9 ns/op	      32 B/op	       1 allocs/op
BenchmarkLuminanaceWCAG-12    	10000000	       224 ns/op	       0 B/op	       0 allocs/op
BenchmarkLuminanace-12        	300000000	         6.00 ns/op	       0 B/op	       0 allocs/op
BenchmarkContrast-12          	 5000000	       257 ns/op	       0 B/op	       0 allocs/op
BenchmarkIsLight-12           	2000000000	         0.26 ns/op	       0 B/op	       0 allocs/op
BenchmarkIsDark-12            	2000000000	         0.26 ns/op	       0 B/op	       0 allocs/op
BenchmarkHSV-12               	50000000	        34.2 ns/op	       0 B/op	       0 allocs/op
BenchmarkHSVA-12              	50000000	        35.0 ns/op	       0 B/op	       0 allocs/op
BenchmarkHSL-12               	50000000	        31.9 ns/op	       0 B/op	       0 allocs/op
BenchmarkHSLA-12              	50000000	        32.0 ns/op	       0 B/op	       0 allocs/op
BenchmarkRGB-12               	2000000000	         0.52 ns/op	       0 B/op	       0 allocs/op
BenchmarkRGBA-12              	2000000000	         0.26 ns/op	       0 B/op	       0 allocs/op
BenchmarkCMYK-12              	50000000	        32.9 ns/op	       0 B/op	       0 allocs/op
BenchmarkHex-12               	20000000	        90.1 ns/op	      32 B/op	       4 allocs/op
BenchmarkHTMLHex-12           	10000000	       146 ns/op	      40 B/op	       5 allocs/op
BenchmarkHTMLName-12          	20000000	       107 ns/op	      32 B/op	       4 allocs/op
BenchmarkHTMLRGBA-12          	 2000000	       839 ns/op	      96 B/op	       5 allocs/op
PASS
ok  	github.com/teacat/noire	67.640s
Success: Benchmarks passed.

安裝方式

打開終端機並且透過 go get 安裝此套件即可。

$ go get github.com/teacat/noire

使用方式

透過 noire.NewRGB(或是 NewHex 等)來初始化一個顏色,並且透過 Lighten 或 Tint 等函式開始編輯該色彩。

package main

import (
	"fmt"

	"github.com/teacat/noire"
)

func main() {
	c := noire.NewRGB(255, 255, 255)
	fmt.Println(c.Invert().Hex())       // 輸出:000000
	fmt.Println(c.Invert().HTML())      // 輸出:Black
	fmt.Println(c.Lighten(1).RGB())     // 輸出:255, 255, 255
}

函式說明

這裡有些函式無法透過圖表說明他們的用途,但這些你都能夠在超讚的 GoDoc 裡面看到如何使用他們。

  • Hue:取得基於 HSL 演算法的色相角度值。
  • Saturation:會取得基於 HSL 演算法的飽和百分比。
  • Lightness:取得基於 HSL 演算法的明亮百分比。
  • LuminanaceWCAG:取得目前顏色基於 WCAG 2.0 演算法的流明度。
  • Luminanace:取得目前顏色的流明度。
  • Contrast:透過 WCAG 流明度演算法算出與指定顏色的對比度。
  • IsLight:得知顏色是否為亮色,但有些時候這可能與肉眼所見的不相符。
  • IsDark:得知顏色是否為暗色,但有些時候這可能與肉眼所見的不相符。
加亮(Lighten)

顏色示意圖

以 HSL 的模式提高顏色的亮度,但這有可能會過於明亮。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Lighten(0.15).Hex())   // 輸出:EAADC2
}
明亮(Brighten)

顏色示意圖

以 RGB 的模式提高顏色的亮度。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Lighten(0.15).Hex())   // 輸出:EAADC2
}
混和加亮(Tint)

顏色示意圖

將目前顏色混上白色以達到最佳平衡與飽和來提高顏色亮度。

func main() {
	c := NewRGB(0, 0, 0)
	fmt.Println(c.Brighten(0.1).Hex())   // 輸出:1A1A1A
}
調暗(Darken)

顏色示意圖

以 HSL 的模式降低顏色的亮度,但這有可能會過於暗沉。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Darken(0.15).Hex())   // 輸出:CB3366
}
混和調暗(Shade)

顏色示意圖

將目前顏色混上黑色以達到最佳平衡與飽和來降低顏色亮度。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Shade(0.15).Hex())   // 輸出:BA5F7E
}
提高飽和度(Saturate)

顏色示意圖

以 HSL 的模式提高顏色的飽和度。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Saturate(0.5).Hex())   // 輸出:FF4C88
}
降低飽和度(Desaturate)

顏色示意圖

以 HSL 的模式降低顏色的飽和度。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Desaturate(0.15).Hex())   // 輸出:AE9DA3
}
更改色相角度(AdjustHue)

顏色示意圖

以 HSL 的模式旋轉色相角度,當超過 360 度時會繼續以順時針旋轉。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Grayscale().Hex())   // 輸出:A5A5A5
}
混合(Mix)

顏色示意圖

將顏色與另一個顏色混合,並且自訂第二顏色的混色權重。

func main() {
	c1 := NewHex("F00")
	c2 := NewHex("00F")
	fmt.Println(c1.Mix(c2, 0.5).HTML())   // 輸出:Purple
}
反相色(Invert)

顏色示意圖

取得 RGB 顏色在絕對座標上的相反位置,並將整個顏色反轉(不是互補色但趨近於)。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Invert().Hex())   // 輸出:248F6B
}
互補色(Complement)

顏色示意圖

取得顏色的互補色(色相環的對面色),相當於 AdjustHue(180)。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Complement().Hex())   // 輸出:70DBB7
}
灰階(Grayscale)

顏色示意圖

將顏色轉換成灰階色調,相當於 Desaturate(1)。

func main() {
	c := NewRGB(219, 112, 148)
	fmt.Println(c.Grayscale().Hex())   // 輸出:A5A5A5
}
前景色(Foreground)

顏色示意圖

取得基於目前顏色流明度而推薦的前景文字顏色(黑或白),越暗的背景就會採用白色文字,反之亦然。

func main() {
	c := NewHTML("Green")
	fmt.Println(c.Foreground().HTML())   // 輸出:White
	c = NewHTML("Red")
	fmt.Println(c.Foreground().HTML())   // 輸出:White
	c = NewHTML("Yellow")
	fmt.Println(c.Foreground().HTML())   // 輸出:Black
}

可參考文件

RGB 轉 HSV, HSL (線上色碼轉換 HSL, HSV, RGB, HEX)

ozdemirburak/iris: PHP library for color manipulation and conversion.

G17: Ensuring that a contrast ratio of at least 7:1 exists between text (and images of text) and background behind the text | Techniques for WCAG 2.0

Using Sass to automatically pick text colors

Relative luminance - Wikipedia

user interface - Given a background color, how to get a foreground color that makes it readable on that background color? - Stack Overflow

image - Formula to determine brightness of RGB color - Stack Overflow

Ant Design 色板生成算法演进之路 - 知乎

Sass基础——颜色函数_Preprocessor, Sass, SCSS 教程_w3cplus

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CMYKToRGB

func CMYKToRGB(c float64, m float64, y float64, k float64) (r float64, g float64, b float64)

CMYKToRGB 能夠將 CMYK 的顏色以有損的方式轉換成 RGB。

參考來源:https://www.ginifab.com.tw/tools/colors/js/colorconverter.js

func HSLToRGB

func HSLToRGB(h float64, s float64, l float64) (r float64, g float64, b float64)

HSLToRGB 能夠將 HSL 的顏色以有損的方式轉換成 RGB。

參考來源:https://www.ginifab.com.tw/tools/colors/js/colorconverter.js

func HSVToRGB

func HSVToRGB(h float64, s float64, v float64) (r float64, g float64, b float64)

HSVToRGB 能夠將 HSV 的顏色以有損的方式轉換成 RGB。

參考來源:https://www.ginifab.com.tw/tools/colors/js/colorconverter.js

func HTMLToRGB

func HTMLToRGB(h string) (r float64, g float64, b float64)

HTMLToRGB 能夠將 HTML 的網頁顏色名稱或十六進制色彩(任意包含 `#` 井字符號或 3 字縮寫)轉換成 RGB。

func HexToRGB

func HexToRGB(h string) (r float64, g float64, b float64)

HexToRGB 能夠將 Hex 十六進制字串(任意包含 `#` 井字符號或 3 字縮寫)轉換成 RGB。

func HueToRGB

func HueToRGB(p float64, q float64, t float64) float64

HueToRGB 能夠以明亮色相顏色轉換成 RGB。

參考來源:https://www.ginifab.com.tw/tools/colors/js/colorconverter.js

func RGBToCMYK

func RGBToCMYK(r float64, g float64, b float64) (c float64, m float64, y float64, k float64)

RGBToCMYK 能夠將 RGB 的顏色以有損的方式轉換成 CMYK。

參考來源:https://www.ginifab.com.tw/tools/colors/js/colorconverter.js

func RGBToHSL

func RGBToHSL(r float64, g float64, b float64) (h float64, s float64, l float64)

RGBToHSL 能夠將 RGB 的顏色以有損的方式轉換成 HSL。

參考來源:https://www.ginifab.com.tw/tools/colors/js/colorconverter.js

func RGBToHSV

func RGBToHSV(r float64, g float64, b float64) (h float64, s float64, v float64)

RGBToHSV 能夠將 RGB 的顏色以有損的方式轉換成 HSV。

參考來源:https://www.ginifab.com.tw/tools/colors/js/colorconverter.js

func RGBToHTML

func RGBToHTML(r float64, g float64, b float64) (h string)

RGBToHTML 能夠將 RGB 的顏色轉換成網頁的顏色名稱(如:`Red`、`White`)或帶有井字號的十六進制色彩。

func RGBToHex

func RGBToHex(r float64, g float64, b float64) string

RGBToHex 能夠將 RGB 的顏色轉換成 Hex 十六進制字串(不包含 `#` 井字符號)。 出來的十六進制英文字母必定是大寫。

Types

type Color

type Color struct {
	Red   float64
	Green float64
	Blue  float64
	Alpha float64
}

Color 呈現了一個可供操作與轉換的顏色資料。

func NewCMYK

func NewCMYK(c float64, m float64, y float64, k float64) *Color

NewCMYK 會初始化一個基於 CMYK 的顏色資訊。

func NewCMYKA

func NewCMYKA(c float64, m float64, y float64, k float64, a float64) *Color

NewCMYKA 會初始化一個基於 CMYK 且帶有 Alpha 的顏色資訊。

func NewHSL

func NewHSL(h float64, s float64, l float64) *Color

NewHSL 會初始化一個基於 HSL 的顏色資訊。

func NewHSLA

func NewHSLA(h float64, s float64, l float64, a float64) *Color

NewHSLA 會初始化一個基於 HSL 且帶有 Alpha 的顏色資訊。

func NewHSV

func NewHSV(h float64, s float64, v float64) *Color

NewHSV 會初始化一個基於 HSV 的顏色資訊。

func NewHSVA

func NewHSVA(h float64, s float64, v float64, a float64) *Color

NewHSVA 會初始化一個基於 HSV 且帶有 Alpha 的顏色資訊。

func NewHTML

func NewHTML(color string) *Color

NewHTML 會初始化一個基於 HTML 的顏色資訊。

func NewHTMLA

func NewHTMLA(color string, a float64) *Color

NewHTMLA 會初始化一個基於 HTML 且帶有 Alpha 的顏色資訊。

func NewHex

func NewHex(color string) *Color

NewHex 會初始化一個基於 Hex 的顏色資訊。

func NewHexA

func NewHexA(color string, a float64) *Color

NewHexA 會初始化一個基於 Hex 且帶有 Alpha 的顏色資訊。

func NewRGB

func NewRGB(r float64, g float64, b float64) *Color

NewRGB 會初始化一個基於 RGB 的顏色資訊。

func NewRGBA

func NewRGBA(r float64, g float64, b float64, a float64) *Color

NewRGBA 會初始化一個基於 RGB 且帶有 Alpha 的顏色資訊。

func (*Color) AdjustHue

func (c *Color) AdjustHue(degrees float64) *Color

AdjustHue 會以角度旋轉基於 HSL 演算法的色相角度。

func (*Color) Brighten

func (c *Color) Brighten(percent float64) *Color

Brighten 會以小數點百分比率(`0.5` 即為 `50%`)將顏色加亮。

參考連結:https://github.com/ozdemirburak/iris

func (*Color) CMYK

func (c *Color) CMYK() (float64, float64, float64, float64)

CMYK 會將目前的顏色以 CMYK 格式回傳。

func (*Color) Complement

func (c *Color) Complement() *Color

Complement 會取得顏色的互補色(色相環的對面色),相當於 `AdjustHue(180)`。

func (*Color) Contrast

func (c *Color) Contrast(color *Color) float64

Contrast 會透過 WCAG 流明度演算法算出與指定顏色的對比度。

func (*Color) Darken

func (c *Color) Darken(percent float64) *Color

Darken 會以小數點百分比率(`0.5` 即為 `50%`)將基於 HSL 演算法的亮度降低。

func (*Color) Desaturate

func (c *Color) Desaturate(percent float64) *Color

Desaturate 會以小數點百分比率(`0.5` 即為 `50%`)將基於 HSL 演算法的飽和度降低。

func (*Color) Foreground

func (c *Color) Foreground() *Color

Foreground 能夠取得基於目前顏色流明度而推薦的前景文字顏色(黑或白), 越暗的背景就會採用白色文字,反之亦然。

func (*Color) Grayscale

func (c *Color) Grayscale() *Color

Grayscale 會將顏色轉換成灰階色調,相當於 `Desaturate(1)`。

func (*Color) HSL

func (c *Color) HSL() (float64, float64, float64)

HSL 會將目前的顏色以 HSL 格式回傳。

func (*Color) HSLA

func (c *Color) HSLA() (float64, float64, float64, float64)

HSLA 會將目前的顏色以 HSLA 格式回傳。

func (*Color) HSV

func (c *Color) HSV() (float64, float64, float64)

HSV 會將目前的顏色以 HSV 格式回傳。

func (*Color) HSVA

func (c *Color) HSVA() (float64, float64, float64, float64)

HSVA 會將目前的顏色以 HSVA 格式回傳。

func (*Color) HTML

func (c *Color) HTML() string

HTML 會將目前的顏色轉換成帶 `#` 井字符號的色彩代碼,如果該色彩與某個網頁色彩名稱相等,則會轉換成網頁色彩名稱(如:`red`、`yellow`)。 如果該顏色帶有 Alpha 透明通道,那麼將會轉譯成 `rgba(x, x, x, x)` 的字串格式。

func (*Color) Hex

func (c *Color) Hex() string

Hex 會將目前的顏色以 Hex 十六進制字串回傳(不帶有 `#` 井字符號)。

func (*Color) Hue

func (c *Color) Hue() float64

Hue 會取得基於 HSL 演算法的色相角度值。

func (*Color) Invert

func (c *Color) Invert() *Color

Invert 會取得 RGB 顏色在絕對座標上的相反位置,並將整個顏色反轉(不是互補色但趨近於)。

func (*Color) IsDark

func (c *Color) IsDark() bool

IsDark 會表示此顏色是否為暗色,但有些時候這可能與肉眼所見的不相符。

func (*Color) IsLight

func (c *Color) IsLight() bool

IsLight 會表示此顏色是否為亮色,但有些時候這可能與肉眼所見的不相符。

func (*Color) Lighten

func (c *Color) Lighten(percent float64) *Color

Lighten 會以小數點百分比率(`0.5` 即為 `50%`)將基於 HSL 演算法的亮度提高。

func (*Color) Lightness

func (c *Color) Lightness() float64

Lightness 會取得基於 HSL 演算法的明亮百分比。

func (*Color) LuminanaceWCAG

func (c *Color) LuminanaceWCAG() float64

LuminanaceWCAG 能夠取得目前顏色基於 WCAG 2.0 演算法的流明度。

參考連結:https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests

參考連結:https://medium.com/dev-channel/using-sass-to-automatically-pick-text-colors-4ba7645d2796

func (*Color) Mix

func (c *Color) Mix(color *Color, weight float64) *Color

Mix 會將傳入的兩個顏色混合在一起,並且透過權重表示後者混入顏色的佔比(`0.5` 即為 `50%`)。

func (*Color) RGB

func (c *Color) RGB() (float64, float64, float64)

RGB 會將目前的顏色以 RGB 格式回傳。

func (*Color) RGBA

func (c *Color) RGBA() (float64, float64, float64, float64)

RGBA 會將目前的顏色以 RGBA 格式回傳。

func (*Color) Saturate

func (c *Color) Saturate(percent float64) *Color

Saturate 會以小數點百分比率(`0.5` 即為 `50%`)將基於 HSL 演算法的飽和度提高。

func (*Color) Saturation

func (c *Color) Saturation() float64

Saturation 會取得基於 HSL 演算法的飽和百分比。

func (*Color) Shade

func (c *Color) Shade(percent float64) *Color

Shade 會以小數點百分比率(`0.5` 即為 `50%`)將顏色盡可能地保持原色調的方式變暗,相當於基於黑色的 `Mix`。

func (*Color) Tint

func (c *Color) Tint(percent float64) *Color

Tint 會以小數點百分比率(`0.5` 即為 `50%`)將顏色盡可能地保持原色調的方式加亮,相當於基於白色的 `Mix`。

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL