趣味工具

转换颜色格式并计算 WCAG 对比度

GET/color/{hex}
公开访问curl

_format=svg 返回原色、更亮、更暗和补色的色板,公开缓存 1 天。对比度按不透明 RGB 计算。 访问类别:匿名 API,可携带 Token 使用独立额度

请求参数

hexpath必填
3、4、6 或 8 位十六进制,可带 #
string · 3、4、6 或 8 位十六进制,可带 # · 最短:3 字符 · 最长:9 字符
againstquery
可选的对照色
string · 可选的对照色 · 最短:3 字符 · 最长:9 字符
_formatquery
响应格式为 svg、json 或 text。/color/{hex} 默认 JSON,带 curl* 标记的接口默认 SVG。plain 是 text 的别名。未识别的值继续按 Accept 协商。
string · 可选:svg、json、text
_colorquery
控制 text 响应的 ANSI 颜色。0、false、off、no 关闭;省略或其他值保留。
string · 可选:0、false、off、no

响应

200 颜色分量、CSS 写法、相对亮度和 WCAG 对比度。_format=svg 时为色板。

application/json

{
  "type": "object",
  "properties": {
    "hex": {
      "type": "string"
    },
    "rgb": {
      "type": "object",
      "properties": {
        "r": {
          "type": "number"
        },
        "g": {
          "type": "number"
        },
        "b": {
          "type": "number"
        },
        "a": {
          "type": "number"
        }
      },
      "required": [
        "r",
        "g",
        "b",
        "a"
      ]
    },
    "hsl": {
      "type": "object",
      "properties": {
        "h": {
          "type": "number"
        },
        "s": {
          "type": "number"
        },
        "l": {
          "type": "number"
        }
      },
      "required": [
        "h",
        "s",
        "l"
      ]
    },
    "css": {
      "type": "object",
      "properties": {
        "hex": {
          "type": "string"
        },
        "rgb": {
          "type": "string"
        },
        "hsl": {
          "type": "string"
        }
      },
      "required": [
        "hex",
        "rgb",
        "hsl"
      ]
    },
    "luminance": {
      "type": "number"
    },
    "contrast": {
      "type": "object",
      "properties": {
        "black": {
          "type": "object",
          "properties": {
            "ratio": {
              "type": "number"
            },
            "aa": {
              "type": "boolean"
            },
            "aaa": {
              "type": "boolean"
            },
            "aaLarge": {
              "type": "boolean"
            },
            "aaaLarge": {
              "type": "boolean"
            }
          },
          "required": [
            "ratio",
            "aa",
            "aaa",
            "aaLarge",
            "aaaLarge"
          ]
        },
        "white": {
          "type": "object",
          "properties": {
            "ratio": {
              "type": "number"
            },
            "aa": {
              "type": "boolean"
            },
            "aaa": {
              "type": "boolean"
            },
            "aaLarge": {
              "type": "boolean"
            },
            "aaaLarge": {
              "type": "boolean"
            }
          },
          "required": [
            "ratio",
            "aa",
            "aaa",
            "aaLarge",
            "aaaLarge"
          ]
        },
        "against": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "ratio": {
              "type": "number"
            },
            "aa": {
              "type": "boolean"
            },
            "aaa": {
              "type": "boolean"
            },
            "aaLarge": {
              "type": "boolean"
            },
            "aaaLarge": {
              "type": "boolean"
            }
          },
          "required": [
            "ratio",
            "aa",
            "aaa",
            "aaLarge",
            "aaaLarge"
          ]
        }
      },
      "required": [
        "black",
        "white",
        "against"
      ]
    }
  },
  "required": [
    "hex",
    "rgb",
    "hsl",
    "css",
    "luminance",
    "contrast"
  ],
  "additionalProperties": {}
}

image/svg+xml

{
  "type": "string"
}
400 请求校验或执行失败

application/json

{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "issues": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "enum": [
                  "body",
                  "query",
                  "path",
                  "header"
                ]
              },
              "field": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "location",
              "field",
              "code",
              "message"
            ]
          }
        }
      },
      "required": [
        "code",
        "message"
      ]
    }
  },
  "required": [
    "error"
  ]
}
401 凭据无效、停用、过期或缺少所需 Token

application/json

{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "issues": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "enum": [
                  "body",
                  "query",
                  "path",
                  "header"
                ]
              },
              "field": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "location",
              "field",
              "code",
              "message"
            ]
          }
        }
      },
      "required": [
        "code",
        "message"
      ]
    }
  },
  "required": [
    "error"
  ]
}
403 需要管理员 Token

application/json

{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "issues": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "enum": [
                  "body",
                  "query",
                  "path",
                  "header"
                ]
              },
              "field": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "location",
              "field",
              "code",
              "message"
            ]
          }
        }
      },
      "required": [
        "code",
        "message"
      ]
    }
  },
  "required": [
    "error"
  ]
}
413 请求体过大

application/json

{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "issues": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "enum": [
                  "body",
                  "query",
                  "path",
                  "header"
                ]
              },
              "field": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "location",
              "field",
              "code",
              "message"
            ]
          }
        }
      },
      "required": [
        "code",
        "message"
      ]
    }
  },
  "required": [
    "error"
  ]
}
415 请求内容类型无效

application/json

{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "issues": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "enum": [
                  "body",
                  "query",
                  "path",
                  "header"
                ]
              },
              "field": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "location",
              "field",
              "code",
              "message"
            ]
          }
        }
      },
      "required": [
        "code",
        "message"
      ]
    }
  },
  "required": [
    "error"
  ]
}
429 请求过于频繁,Retry-After 为建议等待秒数;匿名额度及认证保护在各 Cloudflare 地点近似计数,Token 业务额度使用 D1 原子计数

application/json

{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "issues": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "enum": [
                  "body",
                  "query",
                  "path",
                  "header"
                ]
              },
              "field": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "location",
              "field",
              "code",
              "message"
            ]
          }
        }
      },
      "required": [
        "code",
        "message"
      ]
    }
  },
  "required": [
    "error"
  ]
}
500 内部执行失败

application/json

{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "issues": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "enum": [
                  "body",
                  "query",
                  "path",
                  "header"
                ]
              },
              "field": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "location",
              "field",
              "code",
              "message"
            ]
          }
        }
      },
      "required": [
        "code",
        "message"
      ]
    }
  },
  "required": [
    "error"
  ]
}

响应示例

运行命令前,将环境变量 BASE_URL 设置为站点地址。

成功响应

curl --silent --show-error -H 'User-Agent: simpleWebUtils-example/2.0.1' -H 'Accept: application/json' "$BASE_URL"'/color/336699'
HTTP 200
content-type: application/json
content-encoding: gzip
cache-control: no-store

{
  "hex": "#336699",
  "rgb": {
    "r": 51,
    "g": 102,
    "b": 153,
    "a": 1
  },
  "hsl": {
    "h": 210,
    "s": 50,
    "l": 40
  },
  "css": {
    "hex": "#336699",
    "rgb": "rgb(51, 102, 153)",
    "hsl": "hsl(210, 50%, 40%)"
  },
  "luminance": 0.125,
  "contrast": {
    "black": {
      "ratio": 3.5,
      "aa": false,
      "aaa": false,
      "aaLarge": true,
      "aaaLarge": false
    },
    "white": {
      "ratio": 6,
      "aa": true,
      "aaa": false,
      "aaLarge": true,
      "aaaLarge": true
    },
    "against": null
  }
}

错误示例

curl --silent --show-error -H 'User-Agent: simpleWebUtils-example/2.0.1' -H 'Accept: application/json' "$BASE_URL"'/color/invalid%20value?against=hello'
HTTP 400
content-type: application/json
content-encoding: gzip
cache-control: no-store

{
  "error": {
    "code": "INVALID_INPUT",
    "message": "参数无效",
    "issues": [
      {
        "location": "path",
        "field": "hex",
        "code": "too_big",
        "message": "字符数最多为 9"
      }
    ]
  }
}

curl 访问示例

curl、wget、HTTPie 默认得到 text/plain。示例展示纯文本输出。

命令与输出

curl --silent --show-error -H 'User-Agent: curl/8.7.1' "$BASE_URL"'/color/336699?_color=0'
HTTP 200
content-type: text/plain; charset=utf-8
content-encoding: gzip
cache-control: no-store

hex: #336699
rgb:
  r: 51
  g: 102
  b: 153
  a: 1
hsl:
  h: 210
  s: 50
  l: 40
css:
  hex: #336699
  rgb: rgb(51, 102, 153)
  hsl: hsl(210, 50%, 40%)
luminance: 0.125
contrast:
  black:
    ratio: 3.5
    aa: false
    aaa: false
    aaLarge: true
    aaaLarge: false
  white:
    ratio: 6
    aa: true
    aaa: false
    aaLarge: true
    aaaLarge: true
  against: null

在线调试

必填
Ctrl / ⌘ + Enter
调用示例
curl -X GET 'https://oit.sh/color/336699'

响应

等待请求

等待发送请求

配置上方请求参数后点击「发送请求」查看实时响应

快捷键:Ctrl / ⌘ + Enter