Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Name: Colors
- Author: Anatoly
- License: ISC
- Description: Colors is a library, that manipulates colors.
- Thread: https://codea.io/talk/discussion/10043/colors
- Release: 7
- ]]
- colors = {}
- do
- local colors1 = {}
- -- Origins
- colors1["red"] = color(255, 0, 0, 255)
- colors1["orangered"] = color(255, 80, 0, 255)
- colors1["orange"] = color(255, 150, 0, 255)
- colors1["brown"] = color(200, 115, 45, 255)
- colors1["darkbrown"] = color(115, 75, 40, 255)
- colors1["strawberry-red"] = color(223, 85, 111, 255)
- colors1["yellow"] = color(255, 255, 0, 255)
- colors1["gold"] = color(225, 180, 60, 255)
- colors1["bronze"] = color(190, 155, 90, 255)
- colors1["forestgreen"] = color(0, 155, 0, 255)
- colors1["middlegreen"] = color(150, 155, 0, 255)
- colors1["green"] = color(0, 255, 0, 255)
- colors1["grassgreen"] = color(150, 255, 0, 255)
- colors1["turquoise"] = color(0, 255, 150, 255)
- colors1["neon-green"] = color(210, 255, 0, 255)
- colors1["blue"] = color(0, 0, 255, 255)
- colors1["skyblue"] = color(0, 150, 255, 255)
- colors1["seablue"] = color(50, 200, 255)
- colors1["diamondblue"] = color(95, 170, 225, 255)
- colors1["cyan"] = color(0, 255, 255, 255)
- colors1["silver"] = color(180, 210, 210, 255)
- colors1["cold-white"] = color(192, 212, 225, 255)
- colors1["warm-white"] = color(228, 223, 207, 255)
- colors1["purple"] = color(160, 0, 255, 255)
- colors1["rosa"] = color(255, 0, 150, 255)
- colors1["magenta"] = color(255, 0, 255, 255)
- colors1["pink"] = color(255, 150, 255, 255)
- colors1["violet"] = color(125, 0, 255, 255)
- colors1["darkviolet"] = color(150, 25, 120, 255)
- -- SVG, X11
- -- Author: Andrew Stacey, adopted by Anatoly
- -- Website: http://www.math.ntnu.no/~stacey/HowDidIDoThat/iPad/Codea.html
- -- Source: https://github.com/loopspace/Codea-Library-Base/blob/master/ColourExt.lua
- -- Licence: CC0 (http://wiki.creativecommons.org/CC0)
- -- SVG
- local schema = {}
- schema.svg = {}
- schema.svg.AliceBlue = color(239,247,255,255)
- schema.svg.AntiqueWhite = color(249,234,215,255)
- schema.svg.Aqua = color(0,255,255,255)
- schema.svg.Aquamarine = color(126,255,211,255)
- schema.svg.Azure = color(239,255,255,255)
- schema.svg.Beige = color(244,244,220,255)
- schema.svg.Bisque = color(255,227,196,255)
- schema.svg.Black = color(0,0,0,255)
- schema.svg.BlanchedAlmond = color(255,234,205,255)
- schema.svg.Blue = color(0,0,255,255)
- schema.svg.BlueViolet = color(137,43,226,255)
- schema.svg.Brown = color(165,42,42,255)
- schema.svg.BurlyWood = color(221,183,135,255)
- schema.svg.CadetBlue = color(94,158,160,255)
- schema.svg.Chartreuse = color(126,255,0,255)
- schema.svg.Chocolate = color(210,104,29,255)
- schema.svg.Coral = color(255,126,79,255)
- schema.svg.CornflowerBlue = color(99,149,237,255)
- schema.svg.Cornsilk = color(255,247,220,255)
- schema.svg.Crimson = color(220,20,59,255)
- schema.svg.Cyan = color(0,255,255,255)
- schema.svg.DarkBlue = color(0,0,138,255)
- schema.svg.DarkCyan = color(0,138,138,255)
- schema.svg.DarkGoldenrod = color(183,133,11,255)
- schema.svg.DarkGray = color(169,169,169,255)
- schema.svg.DarkGreen = color(0,99,0,255)
- schema.svg.DarkGrey = color(169,169,169,255)
- schema.svg.DarkKhaki = color(188,182,107,255)
- schema.svg.DarkMagenta = color(138,0,138,255)
- schema.svg.DarkOliveGreen = color(84,107,47,255)
- schema.svg.DarkOrange = color(255,140,0,255)
- schema.svg.DarkOrchid = color(183,49,204,255)
- schema.svg.DarkRed = color(138,0,0,255)
- schema.svg.DarkSalmon = color(232,150,122,255)
- schema.svg.DarkSeaGreen = color(142,187,142,255)
- schema.svg.DarkSlateBlue = color(72,61,138,255)
- schema.svg.DarkSlateGray = color(47,79,79,255)
- schema.svg.DarkSlateGrey = color(47,79,79,255)
- schema.svg.DarkTurquoise = color(0,206,209,255)
- schema.svg.DarkViolet = color(147,0,211,255)
- schema.svg.DeepPink = color(255,20,146,255)
- schema.svg.DeepSkyBlue = color(0,191,255,255)
- schema.svg.DimGray = color(104,104,104,255)
- schema.svg.DimGrey = color(104,104,104,255)
- schema.svg.DodgerBlue = color(29,144,255,255)
- schema.svg.FireBrick = color(177,33,33,255)
- schema.svg.FloralWhite = color(255,249,239,255)
- schema.svg.ForestGreen = color(33,138,33,255)
- schema.svg.Fuchsia = color(255,0,255,255)
- schema.svg.Gainsboro = color(220,220,220,255)
- schema.svg.GhostWhite = color(247,247,255,255)
- schema.svg.Gold = color(255,215,0,255)
- schema.svg.Goldenrod = color(218,165,31,255)
- schema.svg.Gray = color(127,127,127,255)
- schema.svg.Green = color(0,127,0,255)
- schema.svg.GreenYellow = color(173,255,47,255)
- schema.svg.Grey = color(127,127,127,255)
- schema.svg.Honeydew = color(239,255,239,255)
- schema.svg.HotPink = color(255,104,179,255)
- schema.svg.IndianRed = color(205,91,91,255)
- schema.svg.Indigo = color(74,0,130,255)
- schema.svg.Ivory = color(255,255,239,255)
- schema.svg.Khaki = color(239,229,140,255)
- schema.svg.Lavender = color(229,229,249,255)
- schema.svg.LavenderBlush = color(255,239,244,255)
- schema.svg.LawnGreen = color(124,252,0,255)
- schema.svg.LemonChiffon = color(255,249,205,255)
- schema.svg.LightBlue = color(173,216,229,255)
- schema.svg.LightCoral = color(239,127,127,255)
- schema.svg.LightCyan = color(224,255,255,255)
- schema.svg.LightGoldenrod = color(237,221,130,255)
- schema.svg.LightGoldenrodYellow = color(249,249,210,255)
- schema.svg.LightGray = color(211,211,211,255)
- schema.svg.LightGreen = color(144,237,144,255)
- schema.svg.LightGrey = color(211,211,211,255)
- schema.svg.LightPink = color(255,181,192,255)
- schema.svg.LightSalmon = color(255,160,122,255)
- schema.svg.LightSeaGreen = color(31,177,170,255)
- schema.svg.LightSkyBlue = color(135,206,249,255)
- schema.svg.LightSlateBlue = color(132,112,255,255)
- schema.svg.LightSlateGray = color(119,135,153,255)
- schema.svg.LightSlateGrey = color(119,135,153,255)
- schema.svg.LightSteelBlue = color(175,196,221,255)
- schema.svg.LightYellow = color(255,255,224,255)
- schema.svg.Lime = color(0,255,0,255)
- schema.svg.LimeGreen = color(49,205,49,255)
- schema.svg.Linen = color(249,239,229,255)
- schema.svg.Magenta = color(255,0,255,255)
- schema.svg.Maroon = color(127,0,0,255)
- schema.svg.MediumAquamarine = color(102,205,170,255)
- schema.svg.MediumBlue = color(0,0,205,255)
- schema.svg.MediumOrchid = color(186,84,211,255)
- schema.svg.MediumPurple = color(146,112,219,255)
- schema.svg.MediumSeaGreen = color(59,178,113,255)
- schema.svg.MediumSlateBlue = color(123,104,237,255)
- schema.svg.MediumSpringGreen = color(0,249,154,255)
- schema.svg.MediumTurquoise = color(72,209,204,255)
- schema.svg.MediumVioletRed = color(198,21,132,255)
- schema.svg.MidnightBlue = color(24,24,112,255)
- schema.svg.MintCream = color(244,255,249,255)
- schema.svg.MistyRose = color(255,227,225,255)
- schema.svg.Moccasin = color(255,227,181,255)
- schema.svg.NavajoWhite = color(255,221,173,255)
- schema.svg.Navy = color(0,0,127,255)
- schema.svg.NavyBlue = color(0,0,127,255)
- schema.svg.OldLace = color(252,244,229,255)
- schema.svg.Olive = color(127,127,0,255)
- schema.svg.OliveDrab = color(107,141,34,255)
- schema.svg.Orange = color(255,165,0,255)
- schema.svg.OrangeRed = color(255,68,0,255)
- schema.svg.Orchid = color(218,112,214,255)
- schema.svg.PaleGoldenrod = color(237,232,170,255)
- schema.svg.PaleGreen = color(151,251,151,255)
- schema.svg.PaleTurquoise = color(175,237,237,255)
- schema.svg.PaleVioletRed = color(219,112,146,255)
- schema.svg.PapayaWhip = color(255,238,212,255)
- schema.svg.PeachPuff = color(255,218,184,255)
- schema.svg.Peru = color(205,132,63,255)
- schema.svg.Pink = color(255,191,202,255)
- schema.svg.Plum = color(221,160,221,255)
- schema.svg.PowderBlue = color(175,224,229,255)
- schema.svg.Purple = color(127,0,127,255)
- schema.svg.Red = color(255,0,0,255)
- schema.svg.RosyBrown = color(187,142,142,255)
- schema.svg.RoyalBlue = color(65,104,225,255)
- schema.svg.SaddleBrown = color(138,68,19,255)
- schema.svg.Salmon = color(249,127,114,255)
- schema.svg.SandyBrown = color(243,164,95,255)
- schema.svg.SeaGreen = color(45,138,86,255)
- schema.svg.Seashell = color(255,244,237,255)
- schema.svg.Sienna = color(160,81,44,255)
- schema.svg.Silver = color(191,191,191,255)
- schema.svg.SkyBlue = color(135,206,234,255)
- schema.svg.SlateBlue = color(105,89,205,255)
- schema.svg.SlateGray = color(112,127,144,255)
- schema.svg.SlateGrey = color(112,127,144,255)
- schema.svg.Snow = color(255,249,249,255)
- schema.svg.SpringGreen = color(0,255,126,255)
- schema.svg.SteelBlue = color(70,130,179,255)
- schema.svg.Tan = color(210,179,140,255)
- schema.svg.Teal = color(0,127,127,255)
- schema.svg.Thistle = color(216,191,216,255)
- schema.svg.Tomato = color(255,99,71,255)
- schema.svg.Turquoise = color(63,224,207,255)
- schema.svg.Violet = color(237,130,237,255)
- schema.svg.VioletRed = color(208,31,144,255)
- schema.svg.Wheat = color(244,221,178,255)
- schema.svg.White = color(255,255,255,255)
- schema.svg.WhiteSmoke = color(244,244,244,255)
- schema.svg.Yellow = color(255,255,0,255)
- schema.svg.YellowGreen = color(154,205,49,255)
- for a, b in pairs(schema.svg) do
- colors["svg-" .. string.lower(a)] = b
- end
- -- X11
- "x11-" .. string.lower(a)] = b
- end
- -- Generator
- local domains = {
- { -- The default color
- d = "", -- Subdomain
- w = true, -- Grayscale generate subdomains?
- c = function(b) return b end -- Returns color
- },
- {
- d = "slightly-dark-",
- w = false,
- c = function(b) return b:mix(color(65, 255), 0.5) end
- },
- {
- d = "dark-",
- w = false,
- c = function(b) return b:mix(color(0, 255), 0.5) end
- },
- {
- d = "slightly-light-",
- w = false,
- c = function(b) return b:mix(color(190, 255), 0.5) end
- },
- {
- d = "light-",
- w = false,
- c = function(b) return b:mix(color(255, 255), 0.5) end
- },
- {
- d = "middle-",
- w = false,
- c = function(b) return b:mix(color(127, 255), 0.5) end
- },
- {
- d = "reddish-",
- w = true,
- c = function(b) return b:mix(color(255, 0, 0, 255), 0.6) end
- },
- {
- d = "greenish-",
- w = true,
- c = function(b) return b:mix(color(0, 255, 0, 255), 0.6) end
- },
- {
- d = "blueish-",
- w = true,
- c = function(b) return b:mix(color(0, 0, 255, 255), 0.6) end
- },
- {
- d = "cyanish-",
- w = true,
- c = function(b) return b:mix(color(0, 255, 255, 255), 0.6) end
- },
- {
- d = "magentish-",
- w = true,
- c = function(b) return b:mix(color(255, 0, 255, 255), 0.6) end
- },
- {
- d = "yellowish-",
- w = true,
- c = function(b) return b:mix(color(255, 255, 0, 255), 0.6) end
- },
- {
- d = "slightly-reddish-",
- w = true,
- c = function(b) return b:mix(color(255, 0, 0, 255), 0.7) end
- },
- {
- d = "slightly-greenish-",
- w = true,
- c = function(b) return b:mix(color(0, 255, 0, 255), 0.7) end
- },
- {
- d = "slightly-blueish-",
- w = true,
- c = function(b) return b:mix(color(0, 0, 255, 255), 0.7) end
- },
- {
- d = "reduced-",
- w = false,
- c = function(b) return color(math.max(b.r-90,0), math.max(b.g-90,0), math.max(b.b-90,0), 255) end
- },
- {
- d = "saturated-",
- w = false,
- c = function(b) return color(b.r*b.r/255, b.g*b.g/255, b.b*b.b/255) end
- },
- {
- d = "over-saturated-",
- w = false,
- c = function(b) return color(b.r*b.r*b.r/65025, b.g*b.g*b.g/65025, b.b*b.b*b.b/65025) end
- },
- }
- -- Generate subdomains.
- for a, b in pairs(colors1) do
- for c, d in ipairs (domains) do
- colors[d.d .. a] = d.c(b)
- end
- for i = 1, 9 do
- colors[a .. "-" .. i .. "0"] = b:mix(color(0, 255), i/10)
- end
- end
- -- Grayscale
- for a, b in ipairs (domains) do
- if b.w then
- colors[b.d .. "white"] = b.c(color(255, 255))
- colors[b.d .. "black"] = b.c(color(0, 255))
- colors[b.d .. "grey"] = b.c(color(128, 255))
- colors[b.d .. "gray"] = b.c(color(128, 255))
- for i = 1, 9 do
- colors[b.d .. "white-" .. i .. "0"] = b.c(color(25.5 * i, 255))
- end
- end
- end
- end
- -- Initialise
- --[[
- Hex() -> Color() -> color()
- ]]
- Hex = function(l, alpha)
- if not (type(l) == "string") then
- assert(false, "bad argument #1 to 'Hex' (string expected, got ".. type(l) ..")")
- end
- if #l == 6 then
- return Color(tonumber(l, 16))
- elseif #l == 3 then
- l = string.rep(string.sub(l, 1, 1), 2) +
- string.rep(string.sub(l, 2, 2), 2) +
- string.rep(string.sub(l, 3, 3), 2)
- elseif #l == 2 then
- l = string.rep(l, 3)
- elseif #l == 1 then
- l = string.rep(l, 6)
- end
- return Color(tonumber(l, 16), alpha)
- end
- --[[
- Hue() -> color()
- ]]
- Hue = function(val, alpha)
- local r, g, b = 0, 0, 0
- if val > 360 then
- val = val - math.floor(val / 360) * 360
- elseif val < 0 then
- val = val + math.floor(val / 360) * 360
- end
- val = math.floor(val)
- if val <= 60 then
- r = 255
- g = (val/60)*255
- b = 0
- elseif val <= 120 then
- r = 255 - (val-60)/60 * 255
- g = 255
- b = 0
- elseif val <= 180 then
- r = 0
- g = 255
- b = ((val-120)/60)*255
- elseif val <= 240 then
- r = 0
- g = 255 - (val-180)/60 * 255
- b = 255
- elseif val <= 300 then
- r = ((val-240)/60)*255
- g = 0
- b = 255
- else
- r = 255
- g = 0
- b = 255 - (val-300)/60 * 255
- end
- return color(r, g, b, alpha or 255)
- end
- --[[
- Color(col, alpha) -> ... -> color()
- ]]
- Color = function(s, alpha)
- local c = color(0, 255)
- -- Define Color
- if type(s) == "string" then
- s = string.lower(s)
- if s == "random" then
- c = RandomColor()
- elseif s == "transparent" then
- return color(0, 0)
- elseif (s == "random-grey") or (s == "random-gray") then
- c = color(math.random(255))
- elseif string.sub(s, 1, 4) == "hue-" then
- c = Hue(tonumber(string.sub(s, 5, #s)), a)
- elseif colors[s] then
- c = colors[s]
- elseif string.sub(s, 1, 1) == "#" and #s > 1 then
- c = Hex(string.sub(s, 2, #s), alpha)
- end
- elseif type(s) == "table" then
- local methods = {
- {
- name = "origin",
- f = function(q)
- return Color(q)
- end
- },
- {
- name = "shade",
- f = function(q)
- for a, b in pairs{
- -- Visibility
- ["light"] = function()
- return c:mix(color(255, 255), 0.5)
- end,
- ["dark"] = function()
- return c:mix(color(0, 255), 0.5)
- end,
- ["slightly-dark"] = function()
- return c:mix(color(65, 255), 0.5)
- end,
- ["slightly-light"] = function()
- return c:mix(color(190, 255), 0.5)
- end,
- ["middle"] = function()
- return c:mix(color(127, 255), 0.5)
- end,
- ["saturated"] = function()
- return color(c.r*c.r/255, c.g*c.g/255, c.b*c.b/255)
- end,
- -- Shading
- ["reddish"] = function()
- return c:mix(color(255, 0, 0), 0.6)
- end,
- ["greenish"] = function()
- return c:mix(color(0, 255, 0), 0.6)
- end,
- ["blueish"] = function()
- return c:mix(color(0, 0, 255), 0.6)
- end,
- ["slightly-reddish"] = function()
- return c:mix(color(255, 0, 0), 0.7)
- end,
- ["slightly-greenish"] = function()
- return c:mix(color(0, 255, 0), 0.7)
- end,
- ["slightly-blueish"] = function()
- return c:mix(color(0, 0, 255), 0.7)
- end,
- } do
- if q == a then
- return b()
- end
- end
- end
- },
- {
- name = "desaturate",
- f = function(q)
- for a, b in pairs{
- ["avg"] = function()
- return color((c.r+c.g+c.b)/3, 255)
- end,
- ["hsv"] = function()
- return color(math.max(c.r, c.g, c.b), 255)
- end,
- ["hsl"] = function()
- return color((math.max(c.r, c.g, c.b) + math.min(c.r, c.g, c.b))*.5, 255)
- end,
- ["lum"] = function()
- return color(c.r*.22 + c.g*.72 + c.b*.06, 255)
- end,
- ["red"] = function()
- return color(c.r, 255)
- end,
- ["green"] = function()
- return color(c.g, 255)
- end,
- ["blue"] = function()
- return color(c.b, 255)
- end,
- } do
- if q == a then
- return b()
- end
- end
- end
- },
- {
- name = "invert",
- f = function(q)
- if q then
- return color(255-c.r, 255-c.g, 255-c.b, 255)
- end
- end
- },
- {
- name = "filter",
- f = function(q)
- local m = c
- if q.r == false then
- m.r = 0
- end if q.g == false then
- m.g = 0
- end if q.b == false then
- m.b = 0
- end
- return m
- end
- },
- {
- name = "alpha",
- f = function(q)
- return color(c.r, c.g, c.b, q)
- end
- },
- }
- for d, e in ipairs(methods) do
- for a, b in pairs(s) do
- if a == e.name then
- c = e.f(b) or c
- end
- end
- end
- elseif type(s) == "number" then
- local b = s%256
- local g = ((s - b)/256)%256
- local r = ((s - g - b)/256^2)
- c = color(r, g, b)
- elseif type(s) == "userdata" then -- s is already a color
- c = s
- elseif type(s) == "nil" then
- --if s then
- return RandomColor()
- --end
- else
- assert(false, "bad argument #1 to 'Color' (string expected, got ".. type(s) ..")")
- end
- -- Set transparency
- if type(alpha) == "number" then
- c.a = alpha
- elseif type(alpha) == "string" then
- local m = {
- ["slightly-opaque"] = 225,
- ["slightly-visible"] = 50
- }
- c.a = m[alpha]
- elseif type(alpha) == "boolean" then
- if alpha then
- c.a = 255
- else
- c.a = 0
- end
- elseif type(s) == "table" then
- elseif alpha == nil then
- -- ignore
- else
- assert(false, "bad argument #2 to 'Color' (number expected, got ".. type(alpha) ..")")
- end
- return c
- end
- --[[
- Colors(col1, col2, mode) -> color()
- ]]
- Colors = function(c1, c2, mode)
- local modes = {
- ["dif"] = function()
- return color(math.abs(c1.r-c2.r), math.abs(c1.g-c2.g), math.abs(c1.b-c2.b))
- end,
- ["avg"] = function()
- return color((c1.r+c2.r)/2, (c1.g+c2.g)/2, (c1.b+c2.b)/2)
- end,
- ["min"] = function()
- return color(math.min(c1.r, c2.r), math.min(c1.g, c2.g), math.min(c1.b, c2.b))
- end,
- ["max"] = function()
- return color(math.max(c1.r, c2.r), math.max(c1.g, c2.g), math.max(c1.b, c2.b))
- end,
- ["sqrt"] = function()
- return color(math.sqrt(c1.r^2 + c2.r^2)/math.sqrt(2),
- math.sqrt(c1.g^2 + c2.g^2)/math.sqrt(2),
- math.sqrt(c1.b^2 + c2.b^2)/math.sqrt(2)
- )
- end,
- ["multiply"] = function()
- return color(c1.r*c2.r/255, c1.g*c2.g/255, c1.b*c2.b/255)
- end,
- ["screen"] = function()
- return color(255-(255-c1.r)*(255-c2.r)/255,
- 255-(255-c1.g)*(255-c2.g)/255,
- 255-(255-c1.b)*(255-c2.b)/255
- )
- end,
- }
- return modes[string.lower(mode)]()
- end
- -- Fast access implementations
- Fill = function(s, a) fill(Color(s, a)) end
- Stroke = function(s, a) stroke(Color(s, a)) end
- Tint = function(s, a) tint(Color(s, a)) end
- Background = function(s, a) background(Color(s, a)) end
- RandomColor = function(a) return color(math.random(255), math.random(255), math.random(255), a or 255) end
Advertisement
Add Comment
Please, Sign In to add comment