├── .all-contributorsrc ├── .eslintrc.js ├── .github └── dependabot.yml ├── .gitignore ├── .neutrinorc.js ├── .prettierignore ├── .prettierrc ├── CHANGELOG.md ├── README.md ├── build.js ├── chrome.background.js ├── chrome.manifest.json ├── examples ├── jizhi-2.1.0.gif ├── jizhi-2.4.0-1.jpeg ├── jizhi-2.4.0-2.jpeg ├── jizhi-2.4.0-3.jpeg └── jizhi.gif ├── firefox.background.js ├── firefox.manifest.json ├── jest.config.js ├── package.json ├── src ├── App.jsx ├── components │ ├── ColorName.jsx │ ├── ConfigMenu │ │ ├── CustomLink.jsx │ │ ├── FontStatement.jsx │ │ ├── Legal.jsx │ │ ├── MenuContent.jsx │ │ ├── SaveBgMenuItem.jsx │ │ └── index.jsx │ ├── GlobalStyle.jsx │ ├── SearchInput.jsx │ └── Verses │ │ ├── VersesContent.jsx │ │ └── index.jsx ├── constants │ ├── appConstants.js │ ├── colors.js │ ├── shici.json │ └── wavesColors.json ├── fonts │ └── JXZhuoKai.woff ├── index.jsx ├── jizhi-favicon.ico ├── setupTests.js ├── sketchs │ ├── blobs.js │ └── waves.js ├── static │ └── icons │ │ ├── jizhi-128.png │ │ ├── jizhi-16.png │ │ ├── jizhi-32.png │ │ └── jizhi-64.png └── utils │ ├── index.js │ ├── jinrishici.js │ └── storager.js ├── webpack.config.js └── yarn.lock /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | "README.md" 4 | ], 5 | "imageSize": 100, 6 | "commit": false, 7 | "contributors": [ 8 | { 9 | "login": "arthur-zheng", 10 | "name": "Arthur Zheng", 11 | "avatar_url": "https://avatars1.githubusercontent.com/u/4089684?v=4", 12 | "profile": "https://github.com/arthur-zheng", 13 | "contributions": [ 14 | "code", 15 | "ideas", 16 | "bug", 17 | "design" 18 | ] 19 | }, 20 | { 21 | "login": "xnng", 22 | "name": "xnng", 23 | "avatar_url": "https://avatars3.githubusercontent.com/u/38936252?v=4", 24 | "profile": "https://xnngs.cn", 25 | "contributions": [ 26 | "code" 27 | ] 28 | } 29 | ], 30 | "contributorsPerLine": 7, 31 | "projectName": "jizhi", 32 | "projectOwner": "unicar9", 33 | "repoType": "github", 34 | "repoHost": "https://github.com" 35 | } 36 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | const neutrino = require('neutrino'); 2 | 3 | module.exports = neutrino().eslintrc(); 4 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "19:00" 8 | open-pull-requests-limit: 10 9 | ignore: 10 | - dependency-name: eslint-config-prettier 11 | versions: 12 | - 8.1.0 13 | - 8.2.0 14 | - dependency-name: eslint 15 | versions: 16 | - 7.20.0 17 | - 7.21.0 18 | - 7.22.0 19 | - 7.23.0 20 | - 7.24.0 21 | - dependency-name: styled-components 22 | versions: 23 | - 5.2.2 24 | - dependency-name: eslint-plugin-react 25 | versions: 26 | - 7.23.0 27 | - 7.23.1 28 | - dependency-name: node-sass 29 | versions: 30 | - 5.0.0 31 | - dependency-name: handlebars 32 | versions: 33 | - 4.7.7 34 | - dependency-name: copy-webpack-plugin 35 | versions: 36 | - 6.4.1 37 | - 7.0.0 38 | - dependency-name: eslint-plugin-prettier 39 | versions: 40 | - 3.3.1 41 | - dependency-name: archiver 42 | versions: 43 | - 5.2.0 44 | - dependency-name: enzyme-adapter-react-16 45 | versions: 46 | - 1.15.6 47 | - dependency-name: jest 48 | versions: 49 | - 26.6.3 50 | - dependency-name: webpack 51 | versions: 52 | - 4.46.0 53 | - 5.21.2 54 | - dependency-name: webpack-dev-server 55 | versions: 56 | - 3.11.2 57 | - dependency-name: sass-loader 58 | versions: 59 | - 10.1.1 60 | - 11.0.1 61 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | .DS_Store 4 | build_* 5 | builds 6 | build 7 | *.zip 8 | .eslintcache 9 | firefox_src_review 10 | firefox_src_review.sh 11 | firefox_src_review_README.md -------------------------------------------------------------------------------- /.neutrinorc.js: -------------------------------------------------------------------------------- 1 | const copy = require('@neutrinojs/copy'); 2 | const react = require('@neutrinojs/react'); 3 | const jest = require('@neutrinojs/jest'); 4 | const eslint = require('@neutrinojs/eslint'); 5 | 6 | module.exports = { 7 | options: { 8 | root: __dirname, 9 | tests: 'src', 10 | }, 11 | use: [ 12 | eslint({ 13 | // Uses extensions from neutrino.options.extensions 14 | // test: neutrino.regexFromExtensions(), 15 | include: [], 16 | exclude: [/node_modules/], 17 | eslint: { 18 | baseConfig: { 19 | env: { 20 | es6: true, 21 | browser: true, 22 | node: true, 23 | jest: true, 24 | }, 25 | extends: ['eslint:recommended', 'plugin:react/recommended', 'prettier', 'prettier/react'], 26 | globals: { 27 | process: true, 28 | }, 29 | overrides: [], 30 | parser: require.resolve('babel-eslint'), 31 | parserOptions: { 32 | ecmaVersion: 2018, 33 | sourceType: 'module', 34 | }, 35 | plugins: ['prettier', 'import'], 36 | root: true, 37 | rules: { 38 | 'prettier/prettier': ['error'], 39 | 'no-unexpected-multiline': 0, 40 | 'no-duplicate-imports': ['error'], 41 | 'no-console': 0, 42 | 'jsx-a11y/anchor-is-valid': 0, 43 | 'jsx-a11y/anchor-has-content': 0, 44 | 'import/order': [ 45 | 'error', 46 | { 47 | groups: ['builtin', 'external', 'parent', 'sibling', 'index'], 48 | }, 49 | ], 50 | }, 51 | }, 52 | }, 53 | }), 54 | copy({ 55 | patterns: [ 56 | { 57 | from: 'src/static', 58 | to: 'static', 59 | }, 60 | ], 61 | }), 62 | react(), 63 | jest({ 64 | setupFilesAfterEnv: ['/src/setupTests.js'], 65 | }), 66 | ], 67 | }; 68 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .history 2 | builds 3 | coverage -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "es5", 4 | "printWidth": 100 5 | } 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 更新日志 2 | 3 | 此文件包含几枝的所有版本更新内容。部分格式和想法参考了 [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)。 4 | 5 | ## [2.5.2] 6 | 7 | ### 新增 8 | 9 | - 颜色模式支持跟随系统 10 | 11 | ### 修复 12 | 13 | - 更新 manifest.json 14 | - 更正中国色错别字 15 | - 调整诗词显示样式 16 | 17 | ## [2.5.1] 18 | 19 | ### 修复 20 | 21 | - 更新 manifest.json 22 | 23 | ## [2.5.0] 24 | 25 | ### 新增 26 | 27 | - 黑夜模式并搭配对比度适合的背景色 28 | - “关于”菜单栏增加相关信息 29 | 30 | ### 修改 31 | 32 | - 设置菜单显示样式 33 | 34 | ### 修复 35 | 36 | - 若远程加载字体则显示加载提示 37 | 38 | ## [2.4.1] 39 | 40 | ### 新增 41 | 42 | - 三种字体选项 43 | 44 | ### 修复 45 | 46 | - 诗词搜索点击范围 47 | 48 | ## [2.3.0] 49 | 50 | ### 新增 51 | 52 | - 竖版诗词选项 53 | 54 | ### 修改 55 | 56 | - 诗词显示样式 57 | 58 | ### 修复 59 | 60 | - 背景图下载透明度问题 61 | 62 | ## [2.2.0] 63 | 64 | ### 新增 65 | 66 | - 更多中国色 67 | - 在 waves 背景下左右箭头可随机变换中国色 68 | 69 | ### 修改 70 | 71 | - 搜索框默认隐藏 72 | 73 | ## [2.1.3] 74 | 75 | ### 新增 76 | 77 | - 新增可隐藏搜索框 78 | - 新增搜索引擎选项 79 | 80 | ### 修改 81 | 82 | - 更新几枝 logo 83 | - 调整页面布局 84 | 85 | ## [2.1.2] 86 | 87 | ### 新增 88 | 89 | - 支持本地诗词并显示错误提示。 90 | 91 | ## [2.1.1] 92 | 93 | ### 新增 94 | 95 | - 增加今日诗词 credit 96 | 97 | ### 修复 98 | 99 | - 诗句分行排列问题 100 | 101 | ## [2.1.0] 102 | 103 | ### 新增 104 | 105 | - Blobs 背景附带鼠标交互效果 106 | - 快捷键控制动画播放 (Space) 和背景保存 (S) 107 | 108 | ## [2.0.1] 109 | 110 | ### 新增 111 | 112 | - 右下角弹出菜单 113 | - 可设置默认播放动画 114 | - 可设置保留颜色名不淡出消失 115 | - 可点击诗词名自动连接到 Google 搜索 116 | 117 | ### 修改 118 | 119 | - 诗词显示方式,解决了文字显示不全的问题 120 | - 字体大小响应屏幕宽度 121 | 122 | ## [2.0.0] 123 | 124 | ### 修改 125 | 126 | - 新版本用 React 重写了几枝,使用了 [neutrino](https://neutrinojs.org/packages/react/) 的配置 127 | - 使用了新版本 [今日诗词 API](https://www.jinrishici.com/) 128 | - 使用了 [Evergreen React UI library](https://evergreen.segment.com/) 129 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 几枝 | Jizhi 2 | 3 | [![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors) 4 | 5 | 支持自定义新标签页的 Chrome/Firefox/Edge 扩展,几枝将在新标签页上展示中国传统色的层叠波浪动画效果搭配经典诗词。 6 | 7 | A Chrome/Firefox extension with custom new tab page featuring Chinese poems and P5.js enabled noise waves in traditional Chinese colors 8 | 9 | [Chrome Web Store 地址](https://chrome.google.com/webstore/detail/%E5%87%A0%E6%9E%9D/hfohpokminpknagcgncibpacohagppjn) | [Firefox Add-ons 地址](https://addons.mozilla.org/en-US/firefox/addon/jizhi/) | [Edge Add-ons 地址](https://microsoftedge.microsoft.com/addons/detail/%E5%87%A0%E6%9E%9D/jpfojjhemjbonldgbbfplhnpjdfhlppe) 10 | 11 | ## 功能请查看[更新日志](./CHANGELOG.md) 12 | 13 | --- 14 | 15 | ## 相关创意编程(Creative Coding)教程(我参与哒~) 16 | 17 | 文字版课程搭配 Web IDE,实例多多,干货多多。很可能是中文全网 p5.js 最系统最实用的教程了。对编程和 Web 开发有兴趣的同学可以学学,应该会有不一样的体会和认识,也欢迎帮忙宣传一下:) 18 | 19 | - [p5.js 创意编程之旅 - 蓝桥云课](https://www.lanqiao.cn/courses/3117) 20 | 21 | 我和国内首次 Processing 社区日的组织者之一 [Ye Qianqian](https://www.qianqian-ye.com/about.html) 也合作录过两个《几枝》相关的迷你视频教程: 22 | 23 | - [Guest Tutorial #1: p5.js Noise with Unicar - Youtube](https://www.youtube.com/watch?v=QxsFY2GOhNU&t=3s) | [bilibili](https://www.bilibili.com/video/BV1WJ411K7E4?from=search&seid=11104983032650609196) 24 | - [Guest Tutorial #2: Noise Waves in p5.js with Unicar - Youtube](https://www.youtube.com/watch?v=3E8Kt8Sx_x4&t=11s) | [bilibili](https://www.bilibili.com/video/BV1qJ411w7nJ?from=search&seid=11104983032650609196) 25 | 26 | --- 27 | 28 | ## 中文字体说明 29 | 30 | 几枝目前使用了以下几种字体: 31 | 32 | - [江西拙楷体](https://mp.weixin.qq.com/s/H_jrZJIHwNCSyUncVpyXUQ) 33 | 34 | 江西拙楷体是设计师黄煜臣的个人原创字体,可免费商用。字体本身有一种拙朴憨厚的气质,设计师也想就此推广一下自己的家乡文化。 35 | 36 | - [字体圈欣意吉祥宋](https://mp.weixin.qq.com/s/WCwaKtfAiPD8uwSBGU4dNg) 37 | 38 | 字体圈欣意吉祥宋是设计师邹乐伟的个人原创字体,可免费商用。字体本身是圆润娟秀的感觉,是非常有设计感的宋体。 39 | 40 | - [方正细金陵](http://www.foundertype.com/index.php/FontInfo/index/id/202#) 41 | 42 | 《几枝》从一开始使用了方正细金陵体,该字体支持设计师免费自用,但《几枝》在最初的源代码中附上了字体文件,并且在浏览器扩展中使用应该也超过了“设计师自用”的范畴,算是一种侵权行为。因此《几枝》会在不久的将来将该字体移除,同时探索一个能在不侵权的情况下让大家有更多选择的方案。 43 | 44 | 对于中文字体的使用,我们纠结了很久,一直没有找到完美的解决方案。中文字体本身字形复杂,设计一套完整的中文字体比英文字体要复杂得多,而且中文字体文件一般比较大,在网页端使用也会造成一些性能上的问题,无论如何,我们都希望在推广中文字体的同时能尊重中文字体设计师的巧思和辛劳。关于中文字体的使用权限有很多类别,有些字体可供个人免费使用,有些字体可用于个人商用但不支持软件的嵌入式使用,我也购买了相关中文字体,但无奈这些有设计感的中文字体都无法在《几枝》中嵌入使用。总的来说,我们希望可以在尊重原创尊重版权的同时,提供更大的自由度和更多的可能性,同时也希望能通过《几枝》推广更多的中文原创字体。 45 | 46 | 如果大家在字体方面有任何想法和建议,也欢迎随时和我联系:) 47 | 48 | --- 49 | 50 | ## Chrome 本地装载 51 | 52 | - 下载最新的 release 打包文件,首先运行 `yarn` 再运行 `yarn build` 生成 **builds 文件夹(包含 Chrome 和 Firefox 的 build 文件以及压缩包)** 53 | - 在 Chrome 浏览器里输入 chrome://extensions/ 进入插件管理页面 54 | - 打开右上角开发者模式(Developer mode) 55 | - 点击左上角 **Load unpacked** 按钮并选取刚刚生成的 **build_chrome 文件夹** 56 | - 「几枝」装载成功,打开新标签页试试吧 57 | 58 | ![jizhi-2.1.0 gif](https://github.com/unicar9/jizhi/blob/master/examples/jizhi-2.1.0.gif) 59 | ![jizhi gif](https://github.com/unicar9/jizhi/blob/master/examples/jizhi.gif) 60 | 61 | ## 示例 - 最新版 2.4.0 62 | 63 | ![bg-1](https://github.com/unicar9/jizhi/blob/master/examples/jizhi-2.4.0-1.jpeg) 64 | ![bg-2](https://github.com/unicar9/jizhi/blob/master/examples/jizhi-2.4.0-2.jpeg) 65 | ![bg-3](https://github.com/unicar9/jizhi/blob/master/examples/jizhi-2.4.0-3.jpeg) 66 | 67 | ## 鸣谢 68 | 69 | - 使用的字体为[方正金陵系列](http://www.foundertype.com/index.php/FontInfo/index/id/202#)的金陵细简体。 70 | - 层叠的波浪动画效果是利用[p5.js](http://p5js.org/)实现的。 71 | - 诗词名句调用使用[今日诗词 API](https://www.jinrishici.com/)。 72 | - 中国传统色名称及色号参考了以下来源: 73 | - [中国色-中国传统颜色](http://zhongguose.com/) 74 | - [Traditional Chinese Colors | 中国传统颜色](http://boxingp.github.io/traditional-chinese-colors/) 75 | - [中国传统色彩](https://color.uisdc.com/) 76 | - [最全!超美中国传统色 含 RGB、CMYK 色值!值得收藏!](https://www.weibo.com/ttarticle/p/show?id=2309404248238352952773) 77 | 78 | ## Contributors ✨ 79 | 80 | Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
Arthur Zheng
Arthur Zheng

💻 🤔 🐛 🎨
xnng
xnng

💻
90 | 91 | 92 | 93 | This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! 94 | -------------------------------------------------------------------------------- /build.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const chalk = require('chalk'); 4 | const archiver = require('archiver'); 5 | const log = console.log; 6 | 7 | log(process.argv.slice(2)); 8 | 9 | const browsers = { 10 | chrome: { 11 | name: 'chrome', 12 | labelColor: 'magenta', 13 | }, 14 | firefox: { 15 | name: 'firefox', 16 | labelColor: 'yellow', 17 | }, 18 | }; 19 | 20 | const getArchive = (browser) => { 21 | const buildFolderPath = path.resolve(__dirname, `./builds/build_${browser}`); 22 | 23 | if (!fs.existsSync(buildFolderPath)) { 24 | log(chalk.yellow(`${browser} build folder NOT found...`)); 25 | return; 26 | } 27 | 28 | const chalkLabel = chalk.keyword(`${browsers[browser].labelColor}`); 29 | const label = chalkLabel(browser); 30 | 31 | log(label, chalk.green(`${browser} build folder found...`)); 32 | 33 | const zipPath = path.resolve(__dirname, `./builds/${browser}.zip`); 34 | const output = fs.createWriteStream(zipPath); 35 | 36 | const archive = archiver('zip', { 37 | zlib: { level: 9 }, 38 | }); 39 | 40 | output.on('close', () => { 41 | const fileSizeMB = (archive.pointer() / 1048576).toFixed(2); 42 | log(label, chalk.green(`Zip file size: ${fileSizeMB} MB`)); 43 | log(label, 'archiver has been finalized and the output file descriptor has closed.'); 44 | }); 45 | 46 | output.on('end', () => log(label, 'Data has been drained')); 47 | 48 | archive.on('warning', (err) => { 49 | if (err.code === 'ENOENT') { 50 | log(label, 'EEEEEE'); 51 | } else { 52 | throw err; 53 | } 54 | }); 55 | 56 | archive.on('error', (err) => { 57 | throw err; 58 | }); 59 | 60 | archive.pipe(output); 61 | archive.directory(buildFolderPath, false); 62 | archive.finalize(); 63 | }; 64 | 65 | getArchive('chrome'); 66 | getArchive('firefox'); 67 | -------------------------------------------------------------------------------- /chrome.background.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-undef */ 2 | chrome.action.onClicked.addListener(() => { 3 | chrome.tabs.create({ url: 'chrome://newtab' }); 4 | }); 5 | -------------------------------------------------------------------------------- /chrome.manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "几枝", 3 | "version": "2.5.2", 4 | "description": "支持自定义新标签页的 Chrome 扩展,几枝将在新标签页上展示中国传统色的层叠波浪动画效果搭配经典诗词。", 5 | "permissions": [], 6 | "background": { 7 | "service_worker": "background.js" 8 | }, 9 | "action": { 10 | "default_icon": { 11 | "16": "./static/icons/jizhi-16.png", 12 | "32": "./static/icons/jizhi-32.png", 13 | "48": "./static/icons/jizhi-64.png", 14 | "128": "./static/icons/jizhi-128.png" 15 | } 16 | }, 17 | "chrome_url_overrides": { 18 | "newtab": "index.html" 19 | }, 20 | "icons": { 21 | "16": "./static/icons/jizhi-16.png", 22 | "32": "./static/icons/jizhi-32.png", 23 | "48": "./static/icons/jizhi-64.png", 24 | "128": "./static/icons/jizhi-128.png" 25 | }, 26 | "manifest_version": 3, 27 | "content_security_policy": { 28 | "extension_pages": "script-src 'self'; object-src 'self'" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /examples/jizhi-2.1.0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/examples/jizhi-2.1.0.gif -------------------------------------------------------------------------------- /examples/jizhi-2.4.0-1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/examples/jizhi-2.4.0-1.jpeg -------------------------------------------------------------------------------- /examples/jizhi-2.4.0-2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/examples/jizhi-2.4.0-2.jpeg -------------------------------------------------------------------------------- /examples/jizhi-2.4.0-3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/examples/jizhi-2.4.0-3.jpeg -------------------------------------------------------------------------------- /examples/jizhi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/examples/jizhi.gif -------------------------------------------------------------------------------- /firefox.background.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-undef */ 2 | browser.browserAction.onClicked.addListener(() => { 3 | browser.tabs.create({}); 4 | }); 5 | -------------------------------------------------------------------------------- /firefox.manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "几枝", 3 | "version": "2.5.2", 4 | "description": "支持自定义新标签页的扩展,几枝将在新标签页上展示中国传统色的层叠波浪动画效果搭配经典诗词。", 5 | "permissions": [], 6 | "background": { 7 | "scripts": ["background.js"] 8 | }, 9 | "browser_specific_settings": { 10 | "gecko": { 11 | "id": "jizhi@example.com" 12 | } 13 | }, 14 | "browser_action": { 15 | "default_icon": { 16 | "16": "./static/icons/jizhi-16.png", 17 | "32": "./static/icons/jizhi-32.png", 18 | "48": "./static/icons/jizhi-64.png", 19 | "128": "./static/icons/jizhi-128.png" 20 | } 21 | }, 22 | "chrome_url_overrides": { 23 | "newtab": "index.html" 24 | }, 25 | "icons": { 26 | "16": "./static/icons/jizhi-16.png", 27 | "32": "./static/icons/jizhi-32.png", 28 | "48": "./static/icons/jizhi-64.png", 29 | "128": "./static/icons/jizhi-128.png" 30 | }, 31 | "manifest_version": 2, 32 | "content_security_policy": "script-src 'self'; object-src 'self'" 33 | } 34 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | const neutrino = require('neutrino'); 2 | 3 | process.env.NODE_ENV = process.env.NODE_ENV || 'test'; 4 | 5 | module.exports = neutrino().jest(); 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jizhi-react", 3 | "version": "2.5.2", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "build": "rimraf builds && webpack --mode production && node build.js", 8 | "start": "webpack-dev-server --mode development --open --watch --port=3000", 9 | "test": "jest", 10 | "lint": "eslint --cache --format codeframe --ext .mjs,.jsx,.js src", 11 | "lint:fix": "yarn lint --fix", 12 | "format": "prettier --list-different --write \"**/*.{js,jsx}\"" 13 | }, 14 | "dependencies": { 15 | "archiver": "^3.1.1", 16 | "axios": "^0.21.1", 17 | "chalk": "^4.1.2", 18 | "evergreen-ui": "^4.19.1", 19 | "handlebars": "^4.7.6", 20 | "lodash": "^4.17.21", 21 | "prop-types": "^15", 22 | "react": "^16", 23 | "react-dom": "^16", 24 | "react-hot-loader": "^4", 25 | "react-p5-wrapper": "^3.2.1", 26 | "retina-dom-to-image": "^2.5.6", 27 | "styled-components": "^5.2.1" 28 | }, 29 | "devDependencies": { 30 | "@neutrinojs/copy": "^9.5.0", 31 | "@neutrinojs/eslint": "^9.5.0", 32 | "@neutrinojs/jest": "^9.5.0", 33 | "@neutrinojs/react": "^9.5.0", 34 | "copy-webpack-plugin": "^5.0.4", 35 | "enzyme": "^3.9.0", 36 | "enzyme-adapter-react-16": "^1.13.0", 37 | "eslint": "^7.18.0", 38 | "eslint-config-prettier": "^7.1.0", 39 | "eslint-plugin-import": "^2.22.1", 40 | "eslint-plugin-prettier": "^3.3.0", 41 | "eslint-plugin-react": "^7.22.0", 42 | "jest": "^25", 43 | "neutrino": "^9.5.0", 44 | "prettier": "^2.2.1", 45 | "rimraf": "^3.0.2", 46 | "webpack": "^4", 47 | "webpack-cli": "^3", 48 | "webpack-dev-server": "^3" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { hot } from 'react-hot-loader'; 3 | import { ReactP5Wrapper } from 'react-p5-wrapper'; 4 | import { InlineAlert } from 'evergreen-ui'; 5 | import waves from './sketchs/waves'; 6 | import blobs from './sketchs/blobs'; 7 | import Verses from './components/Verses'; 8 | import ConfigMenu from './components/ConfigMenu'; 9 | import SearchInput from './components/SearchInput'; 10 | import ColorName from './components/ColorName'; 11 | import { saveBackground, insertFont, fetchAndSetFont, pickColor, isDarkModeEnabled } from './utils'; 12 | import Storager from './utils/storager'; 13 | import { load } from './utils/jinrishici'; 14 | import { 15 | HORIZONTAL, 16 | VERTICAL, 17 | WAVES, 18 | GOOGLE_SEARCH, 19 | DEFAULT_SHICI, 20 | DEFAULT_FONT, 21 | } from './constants/appConstants'; 22 | import GlobalStyle from './components/GlobalStyle'; 23 | 24 | const DEFAULT_SHICI_LIST = require('./constants/shici.json'); 25 | 26 | class App extends Component { 27 | constructor(props) { 28 | super(props); 29 | 30 | this.state = { 31 | isPlaying: true, 32 | showSearchBarChecked: false, 33 | colorMode: 'os', 34 | isDarkMode: false, 35 | defaultPlayChecked: true, 36 | colorStayChecked: false, 37 | verses: DEFAULT_SHICI, 38 | versesLayout: HORIZONTAL, 39 | errMessage: '', 40 | engineOption: GOOGLE_SEARCH, 41 | value: '', 42 | focused: false, 43 | fontName: DEFAULT_FONT, 44 | waveColor: pickColor(false), 45 | }; 46 | } 47 | 48 | componentDidMount() { 49 | const hasZh = navigator.languages.includes('zh'); 50 | document.title = hasZh ? '新标签页' : 'New Tab'; 51 | 52 | load( 53 | (result) => { 54 | Storager.set({ verses: result.data }); 55 | }, 56 | (err) => { 57 | this.setState({ errMessage: err.errMessage }); 58 | const localShici = 59 | DEFAULT_SHICI_LIST[Math.floor(Math.random() * DEFAULT_SHICI_LIST.length)]; 60 | Storager.set({ verses: localShici }); 61 | } 62 | ); 63 | 64 | Storager.get( 65 | [ 66 | 'verses', 67 | 'versesLayout', 68 | 'selected', 69 | 'colorStayChecked', 70 | 'defaultPlayChecked', 71 | 'engineOption', 72 | 'showSearchBarChecked', 73 | 'fontName', 74 | 'fonts', 75 | 'colorMode', 76 | ], 77 | (res) => { 78 | if (res.fonts && res.fontName === res.fonts.fontName) { 79 | insertFont(res.fonts.value); 80 | } 81 | 82 | this.setState({ 83 | showSearchBarChecked: !!res.showSearchBarChecked, 84 | colorMode: res.colorMode, 85 | colorStayChecked: !!res.colorStayChecked, 86 | defaultPlayChecked: res.defaultPlayChecked !== false, 87 | isVerticalVerses: res.versesLayout === VERTICAL, 88 | isPlaying: res.defaultPlayChecked !== false, 89 | verses: res.verses || DEFAULT_SHICI, 90 | selected: res.selected || WAVES, 91 | engineOption: res.engineOption || GOOGLE_SEARCH, 92 | fontName: res.fontName || DEFAULT_FONT, 93 | isDarkMode: res.colorMode === 'os' ? isDarkModeEnabled() : res.colorMode === 'dark', 94 | waveColor: pickColor(!!this.state.isDarkMode), 95 | }); 96 | } 97 | ); 98 | } 99 | 100 | componentDidUpdate(prevProps, prevState) { 101 | if (prevState.colorMode !== this.state.colorMode) { 102 | this.setState(() => ({ 103 | isDarkMode: 104 | this.state.colorMode === 'os' ? isDarkModeEnabled() : this.state.colorMode === 'dark', 105 | waveColor: pickColor(this.state.isDarkMode), 106 | })); 107 | } 108 | } 109 | 110 | handlePlayPauseSelect = () => this.setState((state) => ({ isPlaying: !state.isPlaying })); 111 | 112 | handleShowSearchBarChange = () => { 113 | this.setState( 114 | (state) => ({ 115 | showSearchBarChecked: !state.showSearchBarChecked, 116 | }), 117 | () => { 118 | Storager.set({ showSearchBarChecked: this.state.showSearchBarChecked }); 119 | } 120 | ); 121 | }; 122 | 123 | handleColorModeOptionChange = (colorMode) => 124 | this.setState({ colorMode }, () => Storager.set({ colorMode })); 125 | 126 | handleVersesLayoutChange = () => { 127 | this.setState( 128 | (state) => ({ 129 | isVerticalVerses: !state.isVerticalVerses, 130 | }), 131 | () => { 132 | Storager.set({ 133 | versesLayout: this.state.isVerticalVerses ? VERTICAL : HORIZONTAL, 134 | }); 135 | } 136 | ); 137 | }; 138 | 139 | handleDefaultPlayChange = () => { 140 | this.setState( 141 | (state) => ({ 142 | defaultPlayChecked: !state.defaultPlayChecked, 143 | }), 144 | () => { 145 | Storager.set({ defaultPlayChecked: this.state.defaultPlayChecked }); 146 | } 147 | ); 148 | }; 149 | 150 | handleColorStayChange = () => { 151 | this.setState( 152 | (state) => ({ 153 | colorStayChecked: !state.colorStayChecked, 154 | }), 155 | () => { 156 | Storager.set({ colorStayChecked: this.state.colorStayChecked }); 157 | } 158 | ); 159 | }; 160 | 161 | handleBgOptionChange = (selected) => { 162 | this.setState({ selected }, () => { 163 | Storager.set({ selected }); 164 | }); 165 | }; 166 | 167 | handleKeyDown = ({ keyCode, altKey }) => { 168 | // space 169 | if (keyCode === 32) this.setState((state) => ({ isPlaying: !state.isPlaying })); 170 | // S + alt 171 | if (keyCode === 83 && altKey) saveBackground(); 172 | 173 | // left or right arrow keys 174 | if (keyCode === 37 || keyCode === 39) { 175 | this.setState(() => ({ waveColor: pickColor(this.state.isDarkMode) })); 176 | } 177 | }; 178 | 179 | handleFontTypeChange = (fontName) => { 180 | if (fontName !== DEFAULT_FONT) { 181 | this.setState(() => ({ isFontLoading: true })); 182 | 183 | Storager.get(['fonts'], (res) => { 184 | if (res.fonts && res.fonts.fontName === fontName) { 185 | insertFont(res.fonts.value); 186 | this.setState(() => ({ isFontLoading: false })); 187 | } else { 188 | fetchAndSetFont(fontName) 189 | .then(() => { 190 | this.setState(() => ({ isFontLoading: false })); 191 | }) 192 | .catch((err) => console.log(err)); 193 | } 194 | }); 195 | } 196 | 197 | this.setState({ fontName }, () => Storager.set({ fontName })); 198 | }; 199 | 200 | handleEngineOptionChange = (engineOption) => 201 | this.setState({ engineOption }, () => Storager.set({ engineOption })); 202 | 203 | handleChange = ({ target: { value } }) => this.setState({ value }); 204 | 205 | handleFocus = () => this.setState({ focused: true }); 206 | 207 | handleBlur = () => this.setState({ focused: false }); 208 | 209 | render() { 210 | const { 211 | verses, 212 | isVerticalVerses, 213 | isPlaying, 214 | showSearchBarChecked, 215 | defaultPlayChecked, 216 | colorStayChecked, 217 | selected, 218 | errMessage, 219 | engineOption, 220 | value, 221 | focused, 222 | fontName, 223 | isDarkMode, 224 | waveColor, 225 | isFontLoading, 226 | colorMode, 227 | } = this.state; 228 | const sketches = { blobs, waves }; 229 | 230 | return selected ? ( 231 |
232 | 233 | {selected === WAVES && ( 234 | 241 | )} 242 | 251 | 257 | 281 | {errMessage && ( 282 |
283 | 284 | {errMessage} 285 | 286 |
287 | )} 288 |
289 | {showSearchBarChecked && ( 290 | 299 | )} 300 |
301 | ) : null; 302 | } 303 | } 304 | 305 | export default hot(module)(App); 306 | -------------------------------------------------------------------------------- /src/components/ColorName.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import styled, { css, keyframes } from 'styled-components'; 4 | 5 | const fadeOut = keyframes` 6 | 0% { 7 | opacity: 1; 8 | } 9 | 50% { 10 | opacity: 1; 11 | } 12 | 100% { 13 | opacity: 0; 14 | } 15 | `; 16 | 17 | const Wrapper = styled.div` 18 | font-family: ${(props) => props.fontName}; 19 | position: absolute; 20 | font-size: calc(100px + 5vw); 21 | right: 0; 22 | top: 0; 23 | color: ${(props) => (props.isDarkMode ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)')}; 24 | writing-mode: vertical-rl; 25 | white-space: nowrap; 26 | transform: translate(10%, -5%); 27 | ${(props) => 28 | props.colorStayChecked 29 | ? css` 30 | opacity: 1; 31 | ` 32 | : css` 33 | opacity: 0; 34 | animation: ${fadeOut} 5s ease; 35 | `}; 36 | `; 37 | 38 | const ColorName = ({ colorName, colorStayChecked, fontName, isDarkMode }) => { 39 | return ( 40 | 41 | {colorName} 42 | 43 | ); 44 | }; 45 | 46 | ColorName.propTypes = { 47 | colorName: PropTypes.string, 48 | colorStayChecked: PropTypes.bool, 49 | fontName: PropTypes.string, 50 | isDarkMode: PropTypes.bool, 51 | }; 52 | 53 | export default ColorName; 54 | -------------------------------------------------------------------------------- /src/components/ConfigMenu/CustomLink.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { Link } from 'evergreen-ui'; 4 | 5 | const CustomLink = ({ url, name }) => ( 6 | 14 | {name} 15 | 16 | ); 17 | 18 | CustomLink.propTypes = { 19 | url: PropTypes.string, 20 | name: PropTypes.string, 21 | }; 22 | 23 | export default CustomLink; 24 | -------------------------------------------------------------------------------- /src/components/ConfigMenu/FontStatement.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { InlineAlert } from 'evergreen-ui'; 3 | import PropTypes from 'prop-types'; 4 | import { FONTS_INFO } from '../../constants/appConstants'; 5 | 6 | const FontStatement = ({ fontName }) => ( 7 | 8 | 9 | 点击查看关于{FONTS_INFO[fontName]['name']}的字体故事 10 | 11 | 12 | ); 13 | 14 | FontStatement.propTypes = { 15 | fontName: PropTypes.string, 16 | }; 17 | 18 | export default FontStatement; 19 | -------------------------------------------------------------------------------- /src/components/ConfigMenu/Legal.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { Paragraph, Avatar, Heading, Pane, HeartIcon } from 'evergreen-ui'; 4 | import styled, { keyframes } from 'styled-components'; 5 | import { WAVES, JIZHI_LINKS } from '../../constants/appConstants'; 6 | import { version } from '../../../package.json'; 7 | import CustomLink from './CustomLink'; 8 | 9 | const pulse = keyframes` 10 | 10% { 11 | transform: scale(1.2) 12 | } 13 | `; 14 | 15 | const HeartPulse = styled(HeartIcon)` 16 | animation: ${pulse} 1.2s infinite; 17 | `; 18 | 19 | const LegalWrapper = styled.div` 20 | display: flex; 21 | flex-direction: column; 22 | justify-content: space-between; 23 | margin: 20px; 24 | `; 25 | 26 | const Legal = ({ waveColor, selected }) => { 27 | const hex = waveColor.hex || ''; 28 | 29 | return ( 30 | 31 | 32 | 33 | 34 | 几枝 v{version} 35 | 36 | 37 | 38 | {selected === WAVES && ( 39 | 40 | 中国色:{hex.toUpperCase()} | {waveColor && waveColor.name} 41 | 42 | )} 43 | 44 | 本扩展使用了 45 | 46 | 47 | 48 | 欢迎访问几枝 49 | 50 | 查看 51 | 和 52 | 53 | 54 | 55 | 56 | 感谢您的支持和喜爱 57 | 58 | 59 | ); 60 | }; 61 | 62 | Legal.propTypes = { 63 | waveColor: PropTypes.object, 64 | selected: PropTypes.string, 65 | }; 66 | 67 | export default Legal; 68 | -------------------------------------------------------------------------------- /src/components/ConfigMenu/MenuContent.jsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { 4 | Pane, 5 | Menu, 6 | Tablist, 7 | Switch, 8 | SidebarTab, 9 | SegmentedControl, 10 | Spinner, 11 | Text, 12 | InlineAlert, 13 | } from 'evergreen-ui'; 14 | import styled from 'styled-components'; 15 | import { WAVES } from '../../constants/appConstants'; 16 | import Legal from './Legal'; 17 | import FontStatement from './FontStatement'; 18 | import SaveBgMenuItem from './SaveBgMenuItem'; 19 | 20 | const SwitchWrapper = styled.div` 21 | display: flex; 22 | justify-content: space-between; 23 | `; 24 | 25 | const SegmentedControlWrapper = styled.div` 26 | margin-left: 16px; 27 | `; 28 | 29 | const MenuContent = (props) => { 30 | const [selectedIndex, setSelectedIndex] = useState(0); 31 | 32 | const { 33 | isPlaying, 34 | onPlayPauseSelect, 35 | showSearchBarChecked, 36 | onShowSearchBarChange, 37 | defaultPlayChecked, 38 | verticalVersesChecked, 39 | onVerticalVersesChange, 40 | onDefaultPlayChange, 41 | colorStayChecked, 42 | onColorStayChange, 43 | selected, 44 | onBgOptionChange, 45 | engineOption, 46 | onEngineOptionChange, 47 | colorMode, 48 | onColorModeOptionChange, 49 | fontName, 50 | onFontTypeChange, 51 | isFontLoading, 52 | waveColor, 53 | } = props; 54 | 55 | const bgOptions = [ 56 | { label: 'Waves', value: 'waves' }, 57 | { label: 'Blobs', value: 'blobs' }, 58 | ]; 59 | 60 | const engineOptions = [ 61 | { 62 | label: 'Google', 63 | value: 'https://www.google.com/search?q=', 64 | }, 65 | { label: 'Baidu', value: 'https://www.baidu.com/s?wd=' }, 66 | { 67 | label: 'Bing', 68 | value: 'https://www.bing.com/search?q=', 69 | }, 70 | ]; 71 | 72 | const colorModeOptions = [ 73 | { 74 | label: '白天', 75 | value: 'light', 76 | }, 77 | { 78 | label: '黑夜', 79 | value: 'dark', 80 | }, 81 | { 82 | label: '跟随系统', 83 | value: 'os', 84 | }, 85 | ]; 86 | 87 | const fontOptions = [ 88 | { label: '江西拙楷', value: 'JXZhuoKai' }, 89 | { label: '欣意吉祥宋', value: 'JiXiangSong' }, 90 | { label: '方正细金陵', value: 'FZXiJinLJW' }, 91 | ]; 92 | 93 | const switchOptions = [ 94 | // { 95 | // name: '黑夜模式', 96 | // checkedState: darkModeChecked, 97 | // onChangeFunc: onDarkModeChange, 98 | // }, 99 | { 100 | name: '竖版诗词', 101 | checkedState: verticalVersesChecked, 102 | onChangeFunc: onVerticalVersesChange, 103 | }, 104 | { 105 | name: '默认播放动画', 106 | checkedState: defaultPlayChecked, 107 | onChangeFunc: onDefaultPlayChange, 108 | }, 109 | { 110 | name: '显示搜索框', 111 | checkedState: showSearchBarChecked, 112 | onChangeFunc: onShowSearchBarChange, 113 | }, 114 | { 115 | name: '保留颜色名称', 116 | checkedState: colorStayChecked, 117 | onChangeFunc: onColorStayChange, 118 | }, 119 | ]; 120 | 121 | const tabs = [ 122 | { 123 | tabName: '设置', 124 | tabContent: ( 125 | <> 126 | 127 | {switchOptions.map((option) => { 128 | if (selected !== WAVES && option.name === '保留颜色名称') return; 129 | return ( 130 | 131 | 132 | {option.name} 133 | 134 | 135 | 136 | ); 137 | })} 138 | 139 | 140 | 141 | 142 | 143 | 149 | 150 | 151 | 152 | ), 153 | }, 154 | { 155 | tabName: '背景', 156 | tabContent: ( 157 | <> 158 | 159 | 164 | 165 | 166 | 167 | 168 | 174 | 175 | 176 | 177 | ), 178 | }, 179 | { 180 | tabName: '操作', 181 | tabContent: ( 182 | 183 | 184 | 190 | {isPlaying ? '暂停动画' : '播放动画'} 191 | 192 | 193 |

波纹背景下使用左右键可以随机切换颜色

194 |
195 |
196 | ), 197 | }, 198 | 199 | { 200 | tabName: '字体', 201 | tabContent: ( 202 | 203 | 204 | 210 | {isFontLoading ? ( 211 | 212 | 213 | 远程加载中…… 214 | 215 | ) : ( 216 | 217 | )} 218 | 219 | 220 | ), 221 | }, 222 | { tabName: '关于', tabContent: }, 223 | ]; 224 | 225 | return ( 226 | 227 | 228 | {tabs.map(({ tabName }, index) => ( 229 | setSelectedIndex(index)} 233 | isSelected={index === selectedIndex} 234 | aria-controls={`panel-${tabName}`} 235 | > 236 | {tabName} 237 | 238 | ))} 239 | 240 | 241 | {tabs.map(({ tabName, tabContent }, index) => ( 242 | 250 | {tabContent} 251 | 252 | ))} 253 | 254 | 255 | ); 256 | }; 257 | 258 | MenuContent.propTypes = { 259 | children: PropTypes.any, 260 | showSearchBarChecked: PropTypes.bool, 261 | onShowSearchBarChange: PropTypes.func, 262 | onPlayPauseSelect: PropTypes.func.isRequired, 263 | onVerticalVersesChange: PropTypes.func.isRequired, 264 | verticalVersesChecked: PropTypes.bool.isRequired, 265 | isPlaying: PropTypes.bool.isRequired, 266 | defaultPlayChecked: PropTypes.bool.isRequired, 267 | onDefaultPlayChange: PropTypes.func.isRequired, 268 | colorStayChecked: PropTypes.bool.isRequired, 269 | onColorStayChange: PropTypes.func.isRequired, 270 | selected: PropTypes.string, 271 | onBgOptionChange: PropTypes.func, 272 | engineOption: PropTypes.string, 273 | onEngineOptionChange: PropTypes.func, 274 | colorMode: PropTypes.string, 275 | onColorModeOptionChange: PropTypes.func, 276 | fontName: PropTypes.string, 277 | onFontTypeChange: PropTypes.func, 278 | isFontLoading: PropTypes.bool, 279 | waveColor: PropTypes.object, 280 | }; 281 | 282 | export default MenuContent; 283 | -------------------------------------------------------------------------------- /src/components/ConfigMenu/SaveBgMenuItem.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Menu } from 'evergreen-ui'; 3 | import { saveBackground } from '../../utils'; 4 | 5 | const SaveBgMenuItem = () => ( 6 | saveBackground()} 10 | secondaryText="Alt/Option + S" 11 | > 12 | 保存背景 13 | 14 | ); 15 | 16 | export default SaveBgMenuItem; 17 | -------------------------------------------------------------------------------- /src/components/ConfigMenu/index.jsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import { Popover, Position, Icon } from 'evergreen-ui'; 3 | import styled, { css } from 'styled-components'; 4 | import MenuContent from './MenuContent'; 5 | 6 | const MenuWrapper = styled.div` 7 | position: absolute; 8 | left: 30px; 9 | bottom: 20px; 10 | `; 11 | 12 | const MenuButton = styled(Icon)` 13 | opacity: 0.6; 14 | cursor: pointer; 15 | transition: all 300ms ease; 16 | transform-origin: 50% 50%; 17 | 18 | &:hover { 19 | opacity: 1; 20 | } 21 | 22 | ${(props) => 23 | props.isOpen && 24 | css` 25 | opacity: 1; 26 | transform: rotate(45deg) scale(1.1); 27 | `} 28 | `; 29 | 30 | const ConfigMenu = (props) => { 31 | const [isOpen, setIsOpen] = useState(false); 32 | 33 | const handleOnOpen = () => { 34 | setIsOpen(true); 35 | }; 36 | 37 | const handleOnClose = () => { 38 | setIsOpen(false); 39 | }; 40 | 41 | return ( 42 | 43 | } 48 | > 49 | 50 | 51 | 52 | ); 53 | }; 54 | 55 | export default ConfigMenu; 56 | -------------------------------------------------------------------------------- /src/components/GlobalStyle.jsx: -------------------------------------------------------------------------------- 1 | import { createGlobalStyle } from 'styled-components'; 2 | import JXZhuoKai from '../fonts/JXZhuoKai.woff'; 3 | 4 | const GlobalStyle = createGlobalStyle` 5 | @font-face { 6 | font-family: 'JXZhuoKai'; 7 | src: url(${JXZhuoKai}) format('woff'); 8 | } 9 | 10 | html, 11 | body { 12 | padding: 0; 13 | margin: 0; 14 | overflow: hidden; 15 | font-family: 'JXZhuoKai'; 16 | height: 100vh; 17 | } 18 | 19 | a { 20 | color: inherit; 21 | text-decoration: none; 22 | } 23 | `; 24 | 25 | export default GlobalStyle; 26 | -------------------------------------------------------------------------------- /src/components/SearchInput.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Icon } from 'evergreen-ui'; 3 | import PropTypes from 'prop-types'; 4 | import styled from 'styled-components'; 5 | 6 | const SearchForm = styled.form` 7 | position: absolute; 8 | top: 20px; 9 | left: 30px; 10 | display: flex; 11 | align-items: center; 12 | opacity: 0.4; 13 | `; 14 | 15 | const Input = styled.input` 16 | outline: none; 17 | border: none; 18 | background-color: transparent; 19 | box-shadow: none; 20 | width: 150px; 21 | font-size: 16px; 22 | color: ${(props) => (props.isDarkMode ? '#fff' : '#000')}; 23 | margin-left: -25px; 24 | padding-left: 35px; 25 | height: 40px; 26 | border-bottom: 2px ${(props) => (props.isDarkMode ? '#dbdbdb' : ' #242424 ')} solid; 27 | opacity: 0; 28 | 29 | &:hover { 30 | opacity: 0.4; 31 | } 32 | &.active { 33 | opacity: 0.8; 34 | } 35 | `; 36 | 37 | const SearchInput = (props) => { 38 | const { engineOption, value, focused, onFocus, onBlur, onChange, isDarkMode } = props; 39 | const iconColor = isDarkMode ? 'white' : null; 40 | return ( 41 | 42 | 43 | 52 | 53 | ); 54 | }; 55 | 56 | SearchInput.propTypes = { 57 | value: PropTypes.string, 58 | focused: PropTypes.bool, 59 | engineOption: PropTypes.string, 60 | onFocus: PropTypes.func, 61 | onBlur: PropTypes.func, 62 | onChange: PropTypes.func, 63 | isDarkMode: PropTypes.bool, 64 | }; 65 | 66 | export default SearchInput; 67 | -------------------------------------------------------------------------------- /src/components/Verses/VersesContent.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Icon } from 'evergreen-ui'; 3 | import PropTypes from 'prop-types'; 4 | import styled, { css } from 'styled-components'; 5 | import { pureWords } from '../../utils'; 6 | 7 | const Content = styled.div` 8 | font-size: calc(30px + 1vw); 9 | width: 80vw; 10 | word-break: keep-all; 11 | ${(props) => 12 | props.isVertical && 13 | css` 14 | width: auto; 15 | line-height: 1.35; 16 | `}; 17 | `; 18 | 19 | const Origin = styled.div` 20 | display: flex; 21 | margin-top: 1em; 22 | font-size: calc(10px + 1vw); 23 | justify-content: center; 24 | align-items: center; 25 | ${(props) => 26 | props.isVertical && 27 | css` 28 | margin: 0; 29 | margin-right: 10px; 30 | justify-content: flex-start; 31 | flex-wrap: wrap; 32 | `}; 33 | `; 34 | 35 | const Stamp = styled.span` 36 | color: #fff; 37 | background-color: #c20000; 38 | border-radius: 3px; 39 | padding: 3px 4px 3px 3px; 40 | margin: 0.5em; 41 | font-size: 67%; 42 | letter-spacing: -1px; 43 | ${(props) => 44 | props.isVertical && 45 | css` 46 | padding: 3px 2px 4px; 47 | `}; 48 | `; 49 | 50 | const Search = styled.div` 51 | opacity: 0; 52 | transition: all 200ms ease-in; 53 | &:hover ${Origin} { 54 | opacity: 0.5; 55 | } 56 | `; 57 | 58 | const VersesContent = (props) => { 59 | const { 60 | verses: { 61 | content, 62 | origin: { author, title }, 63 | }, 64 | engineOption, 65 | isVertical, 66 | } = props; 67 | 68 | const searchLink = `${engineOption}${author} ${title}`; 69 | const filteredContent = isVertical ? pureWords(content) : content; 70 | 71 | return ( 72 | <> 73 | {filteredContent} 74 | 75 | 76 | {`「${title}」`} 77 | 78 | {author} 79 | 80 | 81 | 82 | 83 | 84 | ); 85 | }; 86 | 87 | VersesContent.propTypes = { 88 | verses: PropTypes.object, 89 | isVertical: PropTypes.bool, 90 | engineOption: PropTypes.string, 91 | fontName: PropTypes.string, 92 | isDarkMode: PropTypes.bool, 93 | }; 94 | 95 | export default VersesContent; 96 | -------------------------------------------------------------------------------- /src/components/Verses/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import styled, { css, keyframes } from 'styled-components'; 4 | import { WAVES } from '../../constants/appConstants'; 5 | import VersesContent from './VersesContent'; 6 | 7 | const fadeIn = keyframes` 8 | 0% { 9 | opacity: 0; 10 | } 11 | 100% { 12 | opacity: 0.8; 13 | } 14 | `; 15 | 16 | const VersesWrapper = styled.div` 17 | color: ${(props) => (props.isDarkMode ? '#fff' : '#111')}; 18 | font-family: ${(props) => props.fontName}; 19 | top: ${(props) => (props.isWaves ? '30vh' : '45vh')}; 20 | position: absolute; 21 | transform: translate(-50%, -50%); 22 | left: 50vw; 23 | text-align: center; 24 | opacity: 0.8; 25 | ${(props) => 26 | props.isVerticalVerses 27 | ? css` 28 | text-align: left; 29 | top: 40vh; 30 | transform: translate(-50%, -50%); 31 | writing-mode: vertical-rl; 32 | animation: ${fadeIn} 500ms ease-in; 33 | ` 34 | : css` 35 | transition: top 500ms ease-in-out; 36 | animation: ${fadeIn} 1s ease-in; 37 | `}; 38 | `; 39 | 40 | const Verses = (props) => { 41 | const { verses, engineOption, bgOption, isVerticalVerses, fontName, isDarkMode } = props; 42 | 43 | return ( 44 | 50 | 51 | 52 | ); 53 | }; 54 | 55 | Verses.propTypes = { 56 | verses: PropTypes.object, 57 | bgOption: PropTypes.string, 58 | isVerticalVerses: PropTypes.bool, 59 | engineOption: PropTypes.string, 60 | fontName: PropTypes.string, 61 | isDarkMode: PropTypes.bool, 62 | }; 63 | 64 | export default Verses; 65 | -------------------------------------------------------------------------------- /src/constants/appConstants.js: -------------------------------------------------------------------------------- 1 | export const GOOGLE_SEARCH = 'https://www.google.com/search?q='; 2 | 3 | export const DEFAULT_SHICI = { 4 | content: '红豆生南国,春来发几枝。', 5 | origin: { 6 | author: '王维', 7 | title: '相思', 8 | }, 9 | }; 10 | 11 | export const WAVES = 'waves'; 12 | export const BLOBS = 'blobs'; 13 | export const HORIZONTAL = 'horizontal'; 14 | export const VERTICAL = 'vertical'; 15 | export const DEFAULT_FONT = 'JXZhuoKai'; 16 | 17 | export const FONTS_INFO = { 18 | JXZhuoKai: { 19 | name: '江西拙楷', 20 | link: 'https://mp.weixin.qq.com/s/H_jrZJIHwNCSyUncVpyXUQ', 21 | }, 22 | JiXiangSong: { 23 | name: '欣意吉祥宋', 24 | link: 'https://mp.weixin.qq.com/s/WCwaKtfAiPD8uwSBGU4dNg', 25 | }, 26 | FZXiJinLJW: { 27 | name: '方正细金陵', 28 | link: 'http://www.foundertype.com/index.php/FontInfo/index/id/202#', 29 | }, 30 | }; 31 | 32 | export const JIZHI_LINKS = { 33 | jinrishici: { 34 | name: '今日诗词 API', 35 | link: 'https://www.jinrishici.com/', 36 | }, 37 | home: { 38 | name: 'Github 主页', 39 | link: 'https://github.com/unicar9/jizhi', 40 | }, 41 | changelog: { 42 | name: '更新日志', 43 | link: 'https://github.com/unicar9/jizhi/blob/master/CHANGELOG.md', 44 | }, 45 | issues: { 46 | name: '提交反馈', 47 | link: 'https://github.com/unicar9/jizhi/issues', 48 | }, 49 | }; 50 | -------------------------------------------------------------------------------- /src/constants/colors.js: -------------------------------------------------------------------------------- 1 | const blobsColors = [ 2 | ['#84A6C9', '#FEC1D2', '#FF64B8', '#E3378D'], 3 | ['#ffd7e8', '#f2c0ff', '#bf9fee', '#866ec7'], 4 | ['#00a8b5', '#774898', '#de4383', '#f3ae4b'], 5 | ['#48466d', '#3d84a8', '#46cdcf', '#abedd8'], 6 | ['#e23e57', '#88304e', '#522546', '#311d3f'], 7 | ['#6fe7dd', '#3490de', '#6639a6', '#521262'], 8 | ['#1fab89', '#62d2a2', '#9df3c4', '#d7fbe8'], 9 | ['#071a52', '#086972', '#17b978', '#a7ff83'], 10 | ['#071a52', '#086972', '#17b978', '#a7ff83'], 11 | ]; 12 | 13 | export { blobsColors as default }; 14 | -------------------------------------------------------------------------------- /src/constants/shici.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "5b8b9572e116fb3714e739f8", 4 | "content": "梦觉春衾,江南依旧远。", 5 | "popularity": 548000, 6 | "origin": { 7 | "title": "清商怨·庭花香信尚浅", 8 | "dynasty": "宋代", 9 | "author": "晏几道", 10 | "content": [ 11 | "庭花香信尚浅,最玉楼先暖。梦觉春衾,江南依旧远。", 12 | "回纹锦字暗剪,谩寄与、也应归晚。要问相思,天涯犹自短。" 13 | ], 14 | "translate": null 15 | }, 16 | "matchTags": ["春"], 17 | "recommendedReason": "", 18 | "cacheAt": "2019-05-25T07:40:39.170681" 19 | }, 20 | { 21 | "id": "5b8b9572e116fb3714e6fa58", 22 | "content": "乱花渐欲迷人眼,浅草才能没马蹄。", 23 | "popularity": 734000, 24 | "origin": { 25 | "title": "钱塘湖春行", 26 | "dynasty": "唐代", 27 | "author": "白居易", 28 | "content": [ 29 | "孤山寺北贾亭西,水面初平云脚低。", 30 | "几处早莺争暖树,谁家新燕啄春泥。", 31 | "乱花渐欲迷人眼,浅草才能没马蹄。", 32 | "最爱湖东行不足,绿杨阴里白沙堤。" 33 | ], 34 | "translate": null 35 | }, 36 | "matchTags": ["春"], 37 | "recommendedReason": "", 38 | "cacheAt": "2019-05-25T07:40:39.170681" 39 | }, 40 | { 41 | "id": "5b8b9572e116fb3714e6fb90", 42 | "content": "春潮带雨晚来急,野渡无人舟自横。", 43 | "popularity": 683000, 44 | "origin": { 45 | "title": "滁州西涧", 46 | "dynasty": "唐代", 47 | "author": "韦应物", 48 | "content": ["独怜幽草涧边生,上有黄鹂深树鸣。", "春潮带雨晚来急,野渡无人舟自横。"], 49 | "translate": null 50 | }, 51 | "matchTags": ["春"], 52 | "recommendedReason": "", 53 | "cacheAt": "2019-05-25T07:40:39.170681" 54 | }, 55 | { 56 | "id": "5b8b9572e116fb3714e6f9e3", 57 | "content": "俏也不争春,只把春来报。", 58 | "popularity": 692000, 59 | "origin": { 60 | "title": "卜算子·咏梅", 61 | "dynasty": "近代", 62 | "author": "毛泽东", 63 | "content": [ 64 | "风雨送春归,飞雪迎春到。已是悬崖百丈冰,犹有花枝俏。", 65 | "俏也不争春,只把春来报。待到山花烂漫时,她在丛中笑。" 66 | ], 67 | "translate": [ 68 | "风雨把春天送归这里,飞舞的雪花又在迎接春天的来到。已经是冰封雪冻最寒冷的时候,悬崖边上还盛开着俏丽的梅花。", 69 | "梅花虽然俏丽,但并不炫耀自己,只是为了向人们报告春天到来的消息。等到百花盛开的时候,她将会感到无比欣慰。" 70 | ] 71 | }, 72 | "matchTags": ["春"], 73 | "recommendedReason": "", 74 | "cacheAt": "2019-05-25T07:40:39.170681" 75 | }, 76 | { 77 | "id": "5b8b9572e116fb3714e729b7", 78 | "content": "扫园林、红香万点,送春归去。", 79 | "popularity": 773000, 80 | "origin": { 81 | "title": "贺新郎", 82 | "dynasty": "宋代", 83 | "author": "杨炎正", 84 | "content": [ 85 | "十日狂风雨。扫园林、红香万点,送春归去。独有荼_开未到,留得一分春住。早杨柳、趁晴飞絮。可奈暖埃欺昼永,试薄罗衫子轻如雾。惊旧恨,到眉宇。", 86 | "东风台榭知何处。问燕莺如今,尚有春光几许。可叹一年游赏倦,放得无情露醑。为唤取、扇歌裙舞。乞得风光还两眼,待为君、满把金杯举。扶醉玉,伴挥尘。" 87 | ], 88 | "translate": null 89 | }, 90 | "matchTags": ["春"], 91 | "recommendedReason": "", 92 | "cacheAt": "2019-05-25T07:40:58.607299" 93 | }, 94 | { 95 | "id": "5b8b9572e116fb3714e72279", 96 | "content": "忧喜相寻,风雨过、一江春绿。", 97 | "popularity": 823000, 98 | "origin": { 99 | "title": "满江红·忧喜相寻", 100 | "dynasty": "宋代", 101 | "author": "苏轼", 102 | "content": [ 103 | "董毅夫名钺,自梓漕得罪,罢官东川,归鄱阳,过东坡于齐安。怪其丰暇自得,余问之。曰:“吾再娶柳氏,三日而去官。吾固不戚戚,而优柳氏不能忘怀于进退也。已而欣然,同忧共若处富贵,吾是以益安焉。”命其侍儿歌其所作《满江红》。嗟叹之不足,乃次其韵。", 104 | "忧喜相寻,风雨过、一江春绿。巫峡梦、至今空有,乱山屏簇。何似伯鸾携德耀,箪瓢未足清欢足。渐粲然、光彩照阶庭,生兰玉。", 105 | "幽梦里,传心曲。肠断处,凭他续。文君婿知否,笑君卑辱。君不见周南歌汉广,天教夫子休乔木。便相将、左手抱琴书,云间宿。" 106 | ], 107 | "translate": null 108 | }, 109 | "matchTags": ["春"], 110 | "recommendedReason": "", 111 | "cacheAt": "2019-05-25T07:40:58.607299" 112 | }, 113 | { 114 | "id": "5b8b9572e116fb3714e72e18", 115 | "content": "到今来,海角逢春,天涯为客。", 116 | "popularity": 689000, 117 | "origin": { 118 | "title": "帝台春·芳草碧色", 119 | "dynasty": "宋代", 120 | "author": "李甲", 121 | "content": [ 122 | "芳草碧色,萋萋遍南陌。暖絮乱红,也知人、春愁无力。忆得盈盈拾翠侣,共携赏、凤城寒食。到今来,海角逢春,天涯为客。", 123 | "愁旋释。还似织。泪暗拭。又偷滴。谩伫立、遍倚危阑,尽黄昏,也只是、暮云凝碧。拚则而今已拚了,忘则怎生便忘得。又还问鳞鸿,试重寻消息。" 124 | ], 125 | "translate": null 126 | }, 127 | "matchTags": ["春"], 128 | "recommendedReason": "", 129 | "cacheAt": "2019-05-25T07:40:58.607299" 130 | }, 131 | { 132 | "id": "5b8b9572e116fb3714e719fe", 133 | "content": "春风曾不到,汉使亦应稀。", 134 | "popularity": 1450000, 135 | "origin": { 136 | "title": "发临洮将赴北庭留别", 137 | "dynasty": "唐代", 138 | "author": "岑参", 139 | "content": [ 140 | "闻说轮台路,连年见雪飞。", 141 | "春风曾不到,汉使亦应稀。", 142 | "白草通疏勒,青山过武威。", 143 | "勤王敢道远,私向梦中归。" 144 | ], 145 | "translate": null 146 | }, 147 | "matchTags": ["春"], 148 | "recommendedReason": "", 149 | "cacheAt": "2019-05-25T07:41:21.730202" 150 | }, 151 | { 152 | "id": "5b8b9572e116fb3714e721c1", 153 | "content": "忆得前春,有个人人共。", 154 | "popularity": 1020000, 155 | "origin": { 156 | "title": "蝶恋花·海燕双来归画栋", 157 | "dynasty": "宋代", 158 | "author": "欧阳修", 159 | "content": [ 160 | "海燕双来归画栋。帘影无风,花影频移动。半醉腾腾春睡重。绿鬟堆枕香云拥。", 161 | "翠被双盘金缕凤。忆得前春,有个人人共。花里黄莺时一弄。日斜惊起相思梦。" 162 | ], 163 | "translate": null 164 | }, 165 | "matchTags": ["春"], 166 | "recommendedReason": "", 167 | "cacheAt": "2019-05-25T07:41:21.730202" 168 | }, 169 | { 170 | "id": "5b8b9572e116fb3714e7362f", 171 | "content": "共说春来春去事,多时。", 172 | "popularity": 1440000, 173 | "origin": { 174 | "title": "南乡子·花落未须悲", 175 | "dynasty": "宋代", 176 | "author": "晏几道", 177 | "content": [ 178 | "花落未须悲。红蕊明年又满枝。惟有花间人别后,无期。水阔山长雁字迟。", 179 | "今日最相思。记得攀条话别离。共说春来春去事,多时。一点愁心入翠眉。" 180 | ], 181 | "translate": null 182 | }, 183 | "matchTags": ["春"], 184 | "recommendedReason": "", 185 | "cacheAt": "2019-05-25T07:41:21.730202" 186 | }, 187 | { 188 | "id": "5b8b9572e116fb3714e722a0", 189 | "content": "弦管,弦管,春草昭阳路断。", 190 | "popularity": 582000, 191 | "origin": { 192 | "title": "宫中调笑·团扇", 193 | "dynasty": "唐代", 194 | "author": "王建", 195 | "content": [ 196 | "团扇,团扇,美人病来遮面。", 197 | "玉颜憔悴三年,谁复商量管弦。", 198 | "弦管,弦管,春草昭阳路断。" 199 | ], 200 | "translate": null 201 | }, 202 | "matchTags": ["春"], 203 | "recommendedReason": "", 204 | "cacheAt": "2019-05-25T07:41:21.730202" 205 | }, 206 | { 207 | "id": "5b8b9572e116fb3714e6fc30", 208 | "content": "迟日江山丽,春风花草香。", 209 | "popularity": 1200000, 210 | "origin": { 211 | "title": "绝句二首", 212 | "dynasty": "唐代", 213 | "author": "杜甫", 214 | "content": [ 215 | "迟日江山丽,春风花草香。", 216 | "泥融飞燕子,沙暖睡鸳鸯。", 217 | "江碧鸟逾白,山青花欲燃。", 218 | "今春看又过,何日是归年。" 219 | ], 220 | "translate": null 221 | }, 222 | "matchTags": ["春"], 223 | "recommendedReason": "", 224 | "cacheAt": "2019-05-25T07:41:31.711083" 225 | }, 226 | { 227 | "id": "5b8b9572e116fb3714e7294b", 228 | "content": "过春时,只合安排愁绪送春归。", 229 | "popularity": 899000, 230 | "origin": { 231 | "title": "相见欢·年年负却花期", 232 | "dynasty": "清代", 233 | "author": "张惠言", 234 | "content": [ 235 | "年年负却花期!过春时,只合安排愁绪送春归。", 236 | "梅花雪,梨花月,总相思。自是春来不觉去偏知。" 237 | ], 238 | "translate": null 239 | }, 240 | "matchTags": ["春"], 241 | "recommendedReason": "", 242 | "cacheAt": "2019-05-25T07:41:31.711083" 243 | }, 244 | { 245 | "id": "5b8b9572e116fb3714e72699", 246 | "content": "燕来晚、飞入西城,似说春事迟暮。", 247 | "popularity": 680000, 248 | "origin": { 249 | "title": "莺啼序·春晚感怀", 250 | "dynasty": "宋代", 251 | "author": "吴文英", 252 | "content": [ 253 | "残寒正欺病酒,掩沉香绣户。燕来晚、飞入西城,似说春事迟暮。画船载、清明过却,晴烟冉冉吴宫树。念羁情、游荡随风,化为轻絮。", 254 | "十载西湖,傍柳系马,趁娇尘软雾。溯红渐招入仙溪,锦儿偷寄幽素,倚银屏、春宽梦窄,断红湿、歌纨金缕。暝堤空,轻把斜阳,总还鸥鹭。", 255 | "幽兰旋老,杜若还生,水乡尚寄旅。别后访、六桥无信,事往花委,瘗玉埋香,几番风雨。长波妒盼,遥山羞黛,渔灯分影春江宿。记当时、短楫桃根渡,青楼仿佛,临分败壁题诗,泪墨惨淡尘土。危亭望极,草色天涯,叹鬓侵半苎。暗点检、离痕欢唾,尚染鲛绡,亸凤迷归,破鸾慵舞。殷勤待写,书中长恨,蓝霞辽海沉过雁。漫相思、弹入哀筝柱。伤心千里江南,怨曲重招,断魂在否?" 256 | ], 257 | "translate": null 258 | }, 259 | "matchTags": ["春"], 260 | "recommendedReason": "", 261 | "cacheAt": "2019-05-25T07:41:31.711083" 262 | }, 263 | { 264 | "id": "5b8b9572e116fb3714e6fa35", 265 | "content": "江天一色无纤尘,皎皎空中孤月轮。", 266 | "popularity": 543000, 267 | "origin": { 268 | "title": "春江花月夜", 269 | "dynasty": "唐代", 270 | "author": "张若虚", 271 | "content": [ 272 | "春江潮水连海平,海上明月共潮生。", 273 | "滟滟随波千万里,何处春江无月明!", 274 | "江流宛转绕芳甸,月照花林皆似霰。", 275 | "空里流霜不觉飞,汀上白沙看不见。", 276 | "江天一色无纤尘,皎皎空中孤月轮。", 277 | "江畔何人初见月,江月何年初照人?", 278 | "人生代代无穷已,江月年年只相似。", 279 | "不知江月待何人,但见长江送流水。", 280 | "白云一片去悠悠,青枫浦上不胜愁。", 281 | "谁家今夜扁舟子,何处相思明月楼?", 282 | "可怜楼上月徘徊,应照离人妆镜台。", 283 | "玉户帘中卷不去,捣衣砧上拂还来。", 284 | "此时相望不相闻,愿逐月华流照君。", 285 | "鸿雁长飞光不度,鱼龙潜跃水成文。", 286 | "昨夜闲潭梦落花,可怜春半不还家。", 287 | "江水流春去欲尽,江潭落月复西斜。", 288 | "斜月沉沉藏海雾,碣石潇湘无限路。", 289 | "不知乘月几人归,落月摇情满江树。" 290 | ], 291 | "translate": [ 292 | "春天的江潮水势浩荡,与大海连成一片,一轮明月从海上升起,好像与潮水一起涌出来。", 293 | "月光照耀着春江,随着波浪闪耀千万里,所有地方的春江都有明亮的月光。", 294 | "江水曲曲折折地绕着花草丛生的原野流淌,月光照射着开遍鲜花的树林好像细密的雪珠在闪烁。", 295 | "月色如霜,所以霜飞无从觉察。洲上的白沙和月色融合在一起,看不分明。", 296 | "江水、天空成一色,没有一点微小灰尘,明亮的天空中只有一轮孤月高悬空中。", 297 | "江边上什么人最初看见月亮,江上的月亮哪一年最初照耀着人?", 298 | "人生一代代地无穷无尽,只有江上的月亮一年年地总是相像。", 299 | "不知江上的月亮等待着什么人,只见长江不断地一直运输着流水。", 300 | "游子像一片白云缓缓地离去,只剩下思妇站在离别的青枫浦不胜忧愁。", 301 | "哪家的游子今晚坐着小船在漂流?什么地方有人在明月照耀的楼上相思?", 302 | "可怜楼上不停移动的月光,应该照耀着离人的梳妆台。", 303 | "月光照进思妇的门帘,卷不走,照在她的捣衣砧上,拂不掉。", 304 | "这时互相望着月亮可是互相听不到声音,我希望随着月光流去照耀着您。", 305 | "鸿雁不停地飞翔,而不能飞出无边的月光;月照江面,鱼龙在水中跳跃,激起阵阵波纹。", 306 | "昨天夜里梦见花落闲潭,可惜的是春天过了一半自己还不能回家。", 307 | "江水带着春光将要流尽,水潭上的月亮又要西落。", 308 | "斜月慢慢下沉,藏在海雾里,碣石与潇湘的离人距离无限遥远。", 309 | "不知有几人能趁着月光回家,唯有那西落的月亮摇荡着离情,洒满了江边的树林。" 310 | ] 311 | }, 312 | "matchTags": [], 313 | "recommendedReason": "", 314 | "cacheAt": "2019-05-25T07:41:41.696042" 315 | }, 316 | { 317 | "id": "5b8b9572e116fb3714e72ca3", 318 | "content": "好趁春晴连夜赏,雨便一春休。", 319 | "popularity": 772000, 320 | "origin": { 321 | "title": "武陵春·桃李风前多妩媚", 322 | "dynasty": "宋代", 323 | "author": "辛弃疾", 324 | "content": [ 325 | "桃李风前多妩媚,杨柳更温柔。唤取笙歌烂熳游。且莫管闲愁。", 326 | "好趁春晴连夜赏,雨便一春休。草草杯盘不要收。才晓便扶头。" 327 | ], 328 | "translate": null 329 | }, 330 | "matchTags": ["春"], 331 | "recommendedReason": "", 332 | "cacheAt": "2019-05-25T09:45:20.024574" 333 | }, 334 | { 335 | "id": "5b8b9572e116fb3714e71d4a", 336 | "content": "绿杨烟外晓寒轻,红杏枝头春意闹。", 337 | "popularity": 507000, 338 | "origin": { 339 | "title": "玉楼春·春景", 340 | "dynasty": "宋代", 341 | "author": "宋祁", 342 | "content": [ 343 | "东城渐觉风光好。縠皱波纹迎客棹。绿杨烟外晓寒轻,红杏枝头春意闹。", 344 | "浮生长恨欢娱少。肯爱千金轻一笑。为君持酒劝斜阳,且向花间留晚照。" 345 | ], 346 | "translate": null 347 | }, 348 | "matchTags": ["春"], 349 | "recommendedReason": "", 350 | "cacheAt": "2019-05-25T09:48:42.444276" 351 | }, 352 | { 353 | "id": "5b8b9572e116fb3714e6fc69", 354 | "content": "红豆生南国,春来发几枝。", 355 | "popularity": 992000, 356 | "origin": { 357 | "title": "相思", 358 | "dynasty": "唐代", 359 | "author": "王维", 360 | "content": ["红豆生南国,春来发几枝。", "愿君多采撷,此物最相思。"], 361 | "translate": [ 362 | "鲜红浑圆的红豆,生长在阳光明媚的南方,春暖花开的季节,不知又生出多少?", 363 | "希望思念的人儿多多采集,小小红豆引人相思。" 364 | ] 365 | }, 366 | "matchTags": ["春"], 367 | "recommendedReason": "", 368 | "cacheAt": "2019-05-25T09:48:42.444276" 369 | }, 370 | { 371 | "id": "5b8b9572e116fb3714e6fe40", 372 | "content": "春风得意马蹄疾,一日看尽长安花。", 373 | "popularity": 1180000, 374 | "origin": { 375 | "title": "登科后", 376 | "dynasty": "唐代", 377 | "author": "孟郊", 378 | "content": ["昔日龌龊不足夸,今朝放荡思无涯。", "春风得意马蹄疾,一日看尽长安花。"], 379 | "translate": [ 380 | "往昔的困顿日子再也不足一提,今日金榜题名令人神采飞扬。", 381 | "迎着浩荡春风得意地纵马奔驰,好像一日之内赏遍京城名花。" 382 | ] 383 | }, 384 | "matchTags": ["春"], 385 | "recommendedReason": "", 386 | "cacheAt": "2019-05-25T09:48:42.444276" 387 | }, 388 | { 389 | "id": "5b8b9572e116fb3714e73909", 390 | "content": "年去年来常不老,春比人顽。", 391 | "popularity": 803000, 392 | "origin": { 393 | "title": "卖花声·立春", 394 | "dynasty": "清代", 395 | "author": "黄景仁", 396 | "content": [ 397 | "独饮对辛盘,愁上眉弯。楼窗今夜且休关。前度落红流到海,燕子衔还。", 398 | "书贴更簪欢,旧例都删。到时风雪满千山。年去年来常不老,春比人顽。" 399 | ], 400 | "translate": null 401 | }, 402 | "matchTags": ["春"], 403 | "recommendedReason": "", 404 | "cacheAt": "2019-05-25T09:48:42.444276" 405 | } 406 | ] 407 | -------------------------------------------------------------------------------- /src/constants/wavesColors.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "CMYK": [4, 5, 18, 0], 4 | "RGB": [249, 244, 220], 5 | "hex": "#f9f4dc", 6 | "name": "乳白", 7 | "pinyin": "rubai", 8 | "lightSuitable": false, 9 | "darkSuitable": true 10 | }, 11 | { 12 | "CMYK": [3, 8, 30, 0], 13 | "RGB": [249, 236, 195], 14 | "hex": "#f7e8aa", 15 | "name": "杏仁黄", 16 | "pinyin": "xingrenhuang", 17 | "lightSuitable": false, 18 | "darkSuitable": true 19 | }, 20 | { 21 | "CMYK": [4, 13, 67, 0], 22 | "RGB": [248, 223, 114], 23 | "hex": "#f8df72", 24 | "name": "茉莉黄", 25 | "pinyin": "molihuang", 26 | "lightSuitable": false, 27 | "darkSuitable": true 28 | }, 29 | { 30 | "CMYK": [5, 14, 68, 1], 31 | "RGB": [248, 223, 112], 32 | "hex": "#f8df70", 33 | "name": "麦秆黄", 34 | "pinyin": "maiganhuang", 35 | "lightSuitable": false, 36 | "darkSuitable": true 37 | }, 38 | { 39 | "CMYK": [2, 16, 84, 0], 40 | "RGB": [251, 218, 65], 41 | "hex": "#fbda41", 42 | "name": "油菜花黄", 43 | "pinyin": "youcaihuahuang", 44 | "lightSuitable": false, 45 | "darkSuitable": true 46 | }, 47 | { 48 | "CMYK": [1, 18, 94, 0], 49 | "RGB": [254, 215, 26], 50 | "hex": "#fed71a", 51 | "name": "佛手黄", 52 | "pinyin": "foshouhuang", 53 | "lightSuitable": false, 54 | "darkSuitable": true 55 | }, 56 | { 57 | "CMYK": [3, 16, 50, 0], 58 | "RGB": [247, 222, 152], 59 | "hex": "#f7de98", 60 | "name": "篾黄", 61 | "pinyin": "miehuang", 62 | "lightSuitable": false, 63 | "darkSuitable": true 64 | }, 65 | { 66 | "CMYK": [3, 17, 69, 0], 67 | "RGB": [248, 216, 106], 68 | "hex": "#f8d86a", 69 | "name": "葵扇黄", 70 | "pinyin": "kuishanhuang", 71 | "lightSuitable": false, 72 | "darkSuitable": true 73 | }, 74 | { 75 | "CMYK": [0, 20, 87, 0], 76 | "RGB": [252, 211, 55], 77 | "hex": "#fcd337", 78 | "name": "柠檬黄", 79 | "pinyin": "ningmenghuang", 80 | "lightSuitable": false, 81 | "darkSuitable": true 82 | }, 83 | { 84 | "CMYK": [0, 20, 95, 0], 85 | "RGB": [252, 210, 23], 86 | "hex": "#fcd217", 87 | "name": "金瓜黄", 88 | "pinyin": "jinguahuang", 89 | "lightSuitable": false, 90 | "darkSuitable": true 91 | }, 92 | { 93 | "CMYK": [0, 21, 94, 0], 94 | "RGB": [254, 209, 16], 95 | "hex": "#ffd111", 96 | "name": "藤黄", 97 | "pinyin": "tenghuang", 98 | "lightSuitable": false, 99 | "darkSuitable": true 100 | }, 101 | { 102 | "CMYK": [2, 16, 39, 0], 103 | "RGB": [246, 222, 173], 104 | "hex": "#f6dead", 105 | "name": "酪黄", 106 | "pinyin": "laohuang", 107 | "lightSuitable": false, 108 | "darkSuitable": true 109 | }, 110 | { 111 | "CMYK": [1, 17, 50, 0], 112 | "RGB": [247, 218, 148], 113 | "hex": "#f7da94", 114 | "name": "香水玫瑰黄", 115 | "pinyin": "xiangshuimeiguihuang", 116 | "lightSuitable": false, 117 | "darkSuitable": true 118 | }, 119 | { 120 | "CMYK": [1, 21, 70, 0], 121 | "RGB": [249, 211, 103], 122 | "hex": "#f9d367", 123 | "name": "淡密黄", 124 | "pinyin": "danmihuang", 125 | "lightSuitable": false, 126 | "darkSuitable": true 127 | }, 128 | { 129 | "CMYK": [0, 23, 88, 0], 130 | "RGB": [251, 205, 49], 131 | "hex": "#fbcd31", 132 | "name": "大豆黄", 133 | "pinyin": "dadouhuang", 134 | "lightSuitable": false, 135 | "darkSuitable": true 136 | }, 137 | { 138 | "CMYK": [0, 24, 94, 0], 139 | "RGB": [252, 203, 22], 140 | "hex": "#fccb16", 141 | "name": "素馨黄", 142 | "pinyin": "suxinhuang", 143 | "lightSuitable": false, 144 | "darkSuitable": true 145 | }, 146 | { 147 | "CMYK": [0, 24, 94, 0], 148 | "RGB": [254, 204, 17], 149 | "hex": "#fecc11", 150 | "name": "向日葵黄", 151 | "pinyin": "xiangrikuihuang", 152 | "lightSuitable": false, 153 | "darkSuitable": true 154 | }, 155 | { 156 | "CMYK": [0, 27, 88, 0], 157 | "RGB": [251, 200, 47], 158 | "hex": "#fbc82f", 159 | "name": "雅梨黄", 160 | "pinyin": "yalihuang", 161 | "lightSuitable": false, 162 | "darkSuitable": true 163 | }, 164 | { 165 | "CMYK": [0, 28, 94, 0], 166 | "RGB": [252, 197, 21], 167 | "hex": "#fcc515", 168 | "name": "黄连黄", 169 | "pinyin": "huanglianhuang", 170 | "lightSuitable": false, 171 | "darkSuitable": true 172 | }, 173 | { 174 | "CMYK": [0, 29, 95, 0], 175 | "RGB": [252, 195, 7], 176 | "hex": "#fcc307", 177 | "name": "金盏黄", 178 | "pinyin": "jinzhanhuang", 179 | "lightSuitable": false, 180 | "darkSuitable": true 181 | }, 182 | { 183 | "CMYK": [0, 32, 52, 0], 184 | "RGB": [248, 195, 135], 185 | "hex": "#f8c387", 186 | "name": "蛋壳黄", 187 | "pinyin": "dankehuang", 188 | "lightSuitable": false, 189 | "darkSuitable": true 190 | }, 191 | { 192 | "CMYK": [0, 32, 52, 0], 193 | "RGB": [247, 193, 115], 194 | "hex": "#f7c173", 195 | "name": "肉色", 196 | "pinyin": "rouse", 197 | "lightSuitable": false, 198 | "darkSuitable": true 199 | }, 200 | { 201 | "CMYK": [0, 35, 89, 0], 202 | "RGB": [251, 185, 41], 203 | "hex": "#fbb929", 204 | "name": "鹅掌黄", 205 | "pinyin": "ezhanghuang", 206 | "lightSuitable": false, 207 | "darkSuitable": true 208 | }, 209 | { 210 | "CMYK": [0, 36, 93, 0], 211 | "RGB": [251, 182, 18], 212 | "hex": "#fbb612", 213 | "name": "鸡蛋黄", 214 | "pinyin": "jidanhuang", 215 | "lightSuitable": false, 216 | "darkSuitable": true 217 | }, 218 | { 219 | "CMYK": [0, 35, 94, 0], 220 | "RGB": [252, 183, 10], 221 | "hex": "#fcb70a", 222 | "name": "鼬黄", 223 | "pinyin": "youhuang", 224 | "lightSuitable": false, 225 | "darkSuitable": true 226 | }, 227 | { 228 | "CMYK": [0, 44, 84, 0], 229 | "RGB": [249, 166, 51], 230 | "hex": "#f9a633", 231 | "name": "榴萼黄", 232 | "pinyin": "liuehuang", 233 | "lightSuitable": false, 234 | "darkSuitable": true 235 | }, 236 | { 237 | "CMYK": [0, 45, 92, 0], 238 | "RGB": [251, 164, 20], 239 | "hex": "#fba414", 240 | "name": "淡橘橙", 241 | "pinyin": "danjucheng", 242 | "lightSuitable": false, 243 | "darkSuitable": true 244 | }, 245 | { 246 | "CMYK": [0, 47, 92, 0], 247 | "RGB": [252, 161, 6], 248 | "hex": "#fca106", 249 | "name": "枇杷黄", 250 | "pinyin": "pipahuang", 251 | "lightSuitable": false, 252 | "darkSuitable": true 253 | }, 254 | { 255 | "CMYK": [0, 47, 92, 0], 256 | "RGB": [252, 161, 4], 257 | "hex": "#fca104", 258 | "name": "橙皮黄", 259 | "pinyin": "chengpihuang", 260 | "lightSuitable": false, 261 | "darkSuitable": true 262 | }, 263 | { 264 | "CMYK": [0, 56, 87, 0], 265 | "RGB": [252, 140, 35], 266 | "hex": "#fc8c23", 267 | "name": "北瓜黄", 268 | "pinyin": "beiguahuang", 269 | "lightSuitable": false, 270 | "darkSuitable": true 271 | }, 272 | { 273 | "CMYK": [0, 54, 92, 0], 274 | "RGB": [250, 142, 22], 275 | "hex": "#f28e16", 276 | "name": "杏黄", 277 | "pinyin": "xinghuang", 278 | "lightSuitable": false, 279 | "darkSuitable": true 280 | }, 281 | { 282 | "CMYK": [0, 51, 91, 0], 283 | "RGB": [255, 153, 0], 284 | "hex": "#ff9900", 285 | "name": "雄黄", 286 | "pinyin": "xionghuang", 287 | "lightSuitable": false, 288 | "darkSuitable": true 289 | }, 290 | { 291 | "CMYK": [0, 56, 91, 0], 292 | "RGB": [251, 139, 5], 293 | "hex": "#fb8b05", 294 | "name": "万寿菊黄", 295 | "pinyin": "wanshoujuhuang", 296 | "lightSuitable": false, 297 | "darkSuitable": true 298 | }, 299 | { 300 | "CMYK": [10, 13, 35, 1], 301 | "RGB": [233, 221, 182], 302 | "hex": "#e9ddb6", 303 | "name": "菊蕾白", 304 | "pinyin": "juleibai", 305 | "lightSuitable": false, 306 | "darkSuitable": true 307 | }, 308 | { 309 | "CMYK": [8, 19, 84, 1], 310 | "RGB": [238, 208, 69], 311 | "hex": "#eed045", 312 | "name": "秋葵黄", 313 | "pinyin": "qiukuihuang", 314 | "lightSuitable": false, 315 | "darkSuitable": true 316 | }, 317 | { 318 | "CMYK": [6, 20, 92, 1], 319 | "RGB": [242, 206, 43], 320 | "hex": "#f2ce2b", 321 | "name": "硫华黄", 322 | "pinyin": "liuhuahuang", 323 | "lightSuitable": false, 324 | "darkSuitable": true 325 | }, 326 | { 327 | "CMYK": [6, 22, 92, 0], 328 | "RGB": [241, 202, 23], 329 | "hex": "#f1ca17", 330 | "name": "柚黄", 331 | "pinyin": "youhuang", 332 | "lightSuitable": false, 333 | "darkSuitable": true 334 | }, 335 | { 336 | "CMYK": [15, 20, 66, 2], 337 | "RGB": [221, 200, 113], 338 | "hex": "#ddc871", 339 | "name": "芒果黄", 340 | "pinyin": "mangguohuang", 341 | "lightSuitable": false, 342 | "darkSuitable": true 343 | }, 344 | { 345 | "CMYK": [14, 22, 85, 2], 346 | "RGB": [223, 194, 67], 347 | "hex": "#dfc243", 348 | "name": "蒿黄", 349 | "pinyin": "haohuang", 350 | "lightSuitable": false, 351 | "darkSuitable": true 352 | }, 353 | { 354 | "CMYK": [12, 24, 95, 2], 355 | "RGB": [226, 192, 39], 356 | "hex": "#e2c027", 357 | "name": "姜黄", 358 | "pinyin": "jianghuang", 359 | "lightSuitable": false, 360 | "darkSuitable": true 361 | }, 362 | { 363 | "CMYK": [11, 25, 99, 1], 364 | "RGB": [228, 191, 17], 365 | "hex": "#e4bf11", 366 | "name": "香蕉黄", 367 | "pinyin": "xiangjiaohuang", 368 | "lightSuitable": false, 369 | "darkSuitable": true 370 | }, 371 | { 372 | "CMYK": [17, 27, 94, 4], 373 | "RGB": [210, 180, 44], 374 | "hex": "#d2b42c", 375 | "name": "草黄", 376 | "pinyin": "caohuang", 377 | "lightSuitable": false, 378 | "darkSuitable": true 379 | }, 380 | { 381 | "CMYK": [17, 29, 100, 4], 382 | "RGB": [210, 177, 22], 383 | "hex": "#d2b116", 384 | "name": "新禾绿", 385 | "pinyin": "xinhelv", 386 | "lightSuitable": false, 387 | "darkSuitable": true 388 | }, 389 | { 390 | "CMYK": [28, 26, 45, 7], 391 | "RGB": [183, 174, 143], 392 | "hex": "#b7ae8f", 393 | "name": "月灰", 394 | "pinyin": "yuehui", 395 | "lightSuitable": false, 396 | "darkSuitable": true 397 | }, 398 | { 399 | "CMYK": [30, 30, 70, 12], 400 | "RGB": [173, 158, 85], 401 | "hex": "#ad9e5f", 402 | "name": "淡灰绿", 403 | "pinyin": "danhuilv", 404 | "lightSuitable": false, 405 | "darkSuitable": true 406 | }, 407 | { 408 | "CMYK": [38, 38, 76, 24], 409 | "RGB": [142, 128, 75], 410 | "hex": "#8e804b", 411 | "name": "草灰绿", 412 | "pinyin": "caohuilv", 413 | "lightSuitable": true, 414 | "darkSuitable": true 415 | }, 416 | { 417 | "CMYK": [36, 42, 100, 29], 418 | "RGB": [136, 115, 34], 419 | "hex": "#887322", 420 | "name": "苔绿", 421 | "pinyin": "tailv", 422 | "lightSuitable": true, 423 | "darkSuitable": false 424 | }, 425 | { 426 | "CMYK": [36, 42, 100, 30], 427 | "RGB": [134, 112, 24], 428 | "hex": "#867018", 429 | "name": "碧螺春绿", 430 | "pinyin": "biluochunlv", 431 | "lightSuitable": true, 432 | "darkSuitable": false 433 | }, 434 | { 435 | "CMYK": [47, 47, 65, 42], 436 | "RGB": [104, 94, 72], 437 | "hex": "#685e48", 438 | "name": "燕羽灰", 439 | "pinyin": "yanyuhui", 440 | "lightSuitable": true, 441 | "darkSuitable": false 442 | }, 443 | { 444 | "CMYK": [46, 47, 69, 42], 445 | "RGB": [105, 94, 69], 446 | "hex": "#695e45", 447 | "name": "蟹壳灰", 448 | "pinyin": "xiekehui", 449 | "lightSuitable": true, 450 | "darkSuitable": false 451 | }, 452 | { 453 | "CMYK": [48, 48, 100, 45], 454 | "RGB": [100, 88, 34], 455 | "hex": "#645822", 456 | "name": "潭水绿", 457 | "pinyin": "tanshuilv", 458 | "lightSuitable": true, 459 | "darkSuitable": false 460 | }, 461 | { 462 | "CMYK": [50, 50, 10, 48], 463 | "RGB": [94, 83, 20], 464 | "hex": "#5e5314", 465 | "name": "橄榄绿", 466 | "pinyin": "ganlanlv", 467 | "lightSuitable": true, 468 | "darkSuitable": false 469 | }, 470 | { 471 | "CMYK": [2, 6, 18, 0], 472 | "RGB": [249, 241, 219], 473 | "hex": "#f9f1db", 474 | "name": "蚌肉白", 475 | "pinyin": "bangroubai", 476 | "lightSuitable": false, 477 | "darkSuitable": true 478 | }, 479 | { 480 | "CMYK": [3, 10, 31, 0], 481 | "RGB": [248, 232, 193], 482 | "hex": "#f8e8c1", 483 | "name": "豆汁黄", 484 | "pinyin": "douzhihuang", 485 | "lightSuitable": false, 486 | "darkSuitable": true 487 | }, 488 | { 489 | "CMYK": [1, 19, 66, 0], 490 | "RGB": [249, 215, 112], 491 | "hex": "#f9d770", 492 | "name": "淡茧黄", 493 | "pinyin": "danjianhuang", 494 | "lightSuitable": false, 495 | "darkSuitable": true 496 | }, 497 | { 498 | "CMYK": [0, 26, 94, 0], 499 | "RGB": [255, 201, 12], 500 | "hex": "#ffc90c", 501 | "name": "乳鸭黄", 502 | "pinyin": "ruyahuang", 503 | "lightSuitable": false, 504 | "darkSuitable": true 505 | }, 506 | { 507 | "CMYK": [5, 11, 22, 0], 508 | "RGB": [242, 230, 206], 509 | "hex": "#f2e6ce", 510 | "name": "荔肉白", 511 | "pinyin": "liroubai", 512 | "lightSuitable": false, 513 | "darkSuitable": true 514 | }, 515 | { 516 | "CMYK": [5, 19, 50, 0], 517 | "RGB": [240, 214, 149], 518 | "hex": "#f0d695", 519 | "name": "象牙黄", 520 | "pinyin": "xiangyahuang", 521 | "lightSuitable": false, 522 | "darkSuitable": true 523 | }, 524 | { 525 | "CMYK": [3, 23, 69, 0], 526 | "RGB": [244, 206, 105], 527 | "hex": "#f4ce69", 528 | "name": "炒米黄", 529 | "pinyin": "chaomihuang", 530 | "lightSuitable": false, 531 | "darkSuitable": true 532 | }, 533 | { 534 | "CMYK": [1, 28, 89, 0], 535 | "RGB": [246, 196, 48], 536 | "hex": "#f6c430", 537 | "name": "鹦鹉冠黄", 538 | "pinyin": "yingwuguanhuang", 539 | "lightSuitable": false, 540 | "darkSuitable": true 541 | }, 542 | { 543 | "CMYK": [0, 30, 95, 0], 544 | "RGB": [249, 193, 22], 545 | "hex": "#f9c116", 546 | "name": "木瓜黄", 547 | "pinyin": "muguahuang", 548 | "lightSuitable": false, 549 | "darkSuitable": true 550 | }, 551 | { 552 | "CMYK": [0, 32, 95, 0], 553 | "RGB": [249, 189, 16], 554 | "hex": "#f9bd10", 555 | "name": "浅烙黄", 556 | "pinyin": "qianlaohuang", 557 | "lightSuitable": false, 558 | "darkSuitable": true 559 | }, 560 | { 561 | "CMYK": [11, 18, 39, 1], 562 | "RGB": [229, 211, 170], 563 | "hex": "#e5d3aa", 564 | "name": "莲子白", 565 | "pinyin": "lianzibai", 566 | "lightSuitable": false, 567 | "darkSuitable": true 568 | }, 569 | { 570 | "CMYK": [5, 35, 99, 0], 571 | "RGB": [232, 176, 4], 572 | "hex": "#e8b004", 573 | "name": "谷黄", 574 | "pinyin": "guhuang", 575 | "lightSuitable": false, 576 | "darkSuitable": true 577 | }, 578 | { 579 | "CMYK": [3, 36, 99, 0], 580 | "RGB": [235, 177, 13], 581 | "hex": "#ebb10d", 582 | "name": "栀子黄", 583 | "pinyin": "zhizihuang", 584 | "lightSuitable": false, 585 | "darkSuitable": true 586 | }, 587 | { 588 | "CMYK": [11, 39, 100, 2], 589 | "RGB": [217, 164, 14], 590 | "hex": "#d9a40e", 591 | "name": "芥黄", 592 | "pinyin": "jiehuang", 593 | "lightSuitable": false, 594 | "darkSuitable": true 595 | }, 596 | { 597 | "CMYK": [28, 27, 43, 8], 598 | "RGB": [181, 170, 144], 599 | "hex": "#b5aa90", 600 | "name": "银鼠灰", 601 | "pinyin": "yinshuhui", 602 | "lightSuitable": false, 603 | "darkSuitable": true 604 | }, 605 | { 606 | "CMYK": [26, 31, 57, 10], 607 | "RGB": [182, 164, 118], 608 | "hex": "#b6a476", 609 | "name": "尘灰", 610 | "pinyin": "chenhui", 611 | "lightSuitable": false, 612 | "darkSuitable": true 613 | }, 614 | { 615 | "CMYK": [21, 43, 100, 11], 616 | "RGB": [183, 141, 18], 617 | "hex": "#b78d12", 618 | "name": "枯绿", 619 | "pinyin": "kulv", 620 | "lightSuitable": false, 621 | "darkSuitable": true 622 | }, 623 | { 624 | "CMYK": [35, 44, 80, 30], 625 | "RGB": [135, 114, 62], 626 | "hex": "#87723e", 627 | "name": "鲛青", 628 | "pinyin": "jiaoqing", 629 | "lightSuitable": true, 630 | "darkSuitable": false 631 | }, 632 | { 633 | "CMYK": [32, 50, 100, 31], 634 | "RGB": [135, 104, 24], 635 | "hex": "#876818", 636 | "name": "粽叶绿", 637 | "pinyin": "zongyelv", 638 | "lightSuitable": true, 639 | "darkSuitable": false 640 | }, 641 | { 642 | "CMYK": [31, 51, 100, 30], 643 | "RGB": [138, 105, 19], 644 | "hex": "#8a6913", 645 | "name": "灰绿", 646 | "pinyin": "huilv", 647 | "lightSuitable": true, 648 | "darkSuitable": false 649 | }, 650 | { 651 | "CMYK": [52, 56, 64, 62], 652 | "RGB": [74, 64, 53], 653 | "hex": "#4a4035", 654 | "name": "鹤灰", 655 | "pinyin": "hehui", 656 | "lightSuitable": true, 657 | "darkSuitable": false 658 | }, 659 | { 660 | "CMYK": [48, 58, 70, 62], 661 | "RGB": [77, 64, 48], 662 | "hex": "#4d4030", 663 | "name": "淡松烟", 664 | "pinyin": "dansongyan", 665 | "lightSuitable": true, 666 | "darkSuitable": false 667 | }, 668 | { 669 | "CMYK": [45, 56, 100, 56], 670 | "RGB": [88, 71, 23], 671 | "hex": "#584717", 672 | "name": "暗海水绿", 673 | "pinyin": "anhaishuilv", 674 | "lightSuitable": true, 675 | "darkSuitable": false 676 | }, 677 | { 678 | "CMYK": [45, 55, 100, 54], 679 | "RGB": [91, 73, 19], 680 | "hex": "#5b4913", 681 | "name": "棕榈绿", 682 | "pinyin": "zonglvlv", 683 | "lightSuitable": true, 684 | "darkSuitable": false 685 | }, 686 | { 687 | "CMYK": [1, 11, 24, 0], 688 | "RGB": [249, 223, 205], 689 | "hex": "#f9e9cd", 690 | "name": "米色", 691 | "pinyin": "mise", 692 | "lightSuitable": false, 693 | "darkSuitable": true 694 | }, 695 | { 696 | "CMYK": [1, 15, 38, 0], 697 | "RGB": [248, 224, 176], 698 | "hex": "#f8e0b0", 699 | "name": "淡肉色", 700 | "pinyin": "danrouse", 701 | "lightSuitable": false, 702 | "darkSuitable": true 703 | }, 704 | { 705 | "CMYK": [0, 23, 59, 0], 706 | "RGB": [249, 210, 125], 707 | "hex": "#f9d27d", 708 | "name": "麦芽糖黄", 709 | "pinyin": "maiyatanghuang", 710 | "lightSuitable": false, 711 | "darkSuitable": true 712 | }, 713 | { 714 | "CMYK": [0, 34, 93, 0], 715 | "RGB": [254, 186, 7], 716 | "hex": "#feba07", 717 | "name": "琥珀黄", 718 | "pinyin": "hupohuang", 719 | "lightSuitable": false, 720 | "darkSuitable": true 721 | }, 722 | { 723 | "CMYK": [1, 31, 79, 0], 724 | "RGB": [243, 191, 76], 725 | "hex": "#f3bf4c", 726 | "name": "甘草黄", 727 | "pinyin": "gancaohuang", 728 | "lightSuitable": false, 729 | "darkSuitable": true 730 | }, 731 | { 732 | "CMYK": [0, 33, 83, 0], 733 | "RGB": [248, 188, 49], 734 | "hex": "#f8bc31", 735 | "name": "初熟杏黄", 736 | "pinyin": "chushuxinghuang", 737 | "lightSuitable": false, 738 | "darkSuitable": true 739 | }, 740 | { 741 | "CMYK": [10, 27, 59, 1], 742 | "RGB": [226, 193, 124], 743 | "hex": "#e2c17c", 744 | "name": "浅驼色", 745 | "pinyin": "qiantuose", 746 | "lightSuitable": false, 747 | "darkSuitable": true 748 | }, 749 | { 750 | "CMYK": [7, 32, 78, 1], 751 | "RGB": [229, 183, 81], 752 | "hex": "#e5b751", 753 | "name": "沙石黄", 754 | "pinyin": "shashihuang", 755 | "lightSuitable": false, 756 | "darkSuitable": true 757 | }, 758 | { 759 | "CMYK": [3, 38, 97, 0], 760 | "RGB": [234, 173, 26], 761 | "hex": "#eaad1a", 762 | "name": "虎皮黄", 763 | "pinyin": "hupihuang", 764 | "lightSuitable": false, 765 | "darkSuitable": true 766 | }, 767 | { 768 | "CMYK": [12, 41, 98, 2], 769 | "RGB": [214, 160, 29], 770 | "hex": "#d6a01d", 771 | "name": "土黄", 772 | "pinyin": "tuhuang", 773 | "lightSuitable": false, 774 | "darkSuitable": true 775 | }, 776 | { 777 | "CMYK": [28, 28, 41, 9], 778 | "RGB": [180, 169, 146], 779 | "hex": "#b4a992", 780 | "name": "百灵鸟灰", 781 | "pinyin": "bailingniaohui", 782 | "lightSuitable": false, 783 | "darkSuitable": true 784 | }, 785 | { 786 | "CMYK": [21, 44, 97, 11], 787 | "RGB": [183, 139, 38], 788 | "hex": "#b78b26", 789 | "name": "山鸡黄", 790 | "pinyin": "shanjihuang", 791 | "lightSuitable": false, 792 | "darkSuitable": true 793 | }, 794 | { 795 | "CMYK": [35, 47, 71, 33], 796 | "RGB": [130, 107, 72], 797 | "hex": "#826b48", 798 | "name": "龟背黄", 799 | "pinyin": "guibeihuang", 800 | "lightSuitable": true, 801 | "darkSuitable": false 802 | }, 803 | { 804 | "CMYK": [34, 52, 85, 35], 805 | "RGB": [128, 99, 50], 806 | "hex": "#806332", 807 | "name": "苍黄", 808 | "pinyin": "canghuang", 809 | "lightSuitable": true, 810 | "darkSuitable": false 811 | }, 812 | { 813 | "CMYK": [32, 56, 96, 34], 814 | "RGB": [129, 95, 37], 815 | "hex": "#815f25", 816 | "name": "莱阳梨黄", 817 | "pinyin": "laiyanglihuang", 818 | "lightSuitable": true, 819 | "darkSuitable": false 820 | }, 821 | { 822 | "CMYK": [31, 57, 100, 33], 823 | "RGB": [131, 94, 29], 824 | "hex": "#835e1d", 825 | "name": "蜴蜊绿", 826 | "pinyin": "yililv", 827 | "lightSuitable": true, 828 | "darkSuitable": false 829 | }, 830 | { 831 | "CMYK": [46, 59, 68, 61], 832 | "RGB": [79, 64, 50], 833 | "hex": "#4f4032", 834 | "name": "松鼠灰", 835 | "pinyin": "songshuhui", 836 | "lightSuitable": true, 837 | "darkSuitable": false 838 | }, 839 | { 840 | "CMYK": [44, 61, 76, 62], 841 | "RGB": [80, 62, 42], 842 | "hex": "#503e2a", 843 | "name": "橄榄灰", 844 | "pinyin": "ganlanhui", 845 | "lightSuitable": true, 846 | "darkSuitable": false 847 | }, 848 | { 849 | "CMYK": [43, 63, 88, 61], 850 | "RGB": [81, 60, 32], 851 | "hex": "#513c20", 852 | "name": "蟹壳绿", 853 | "pinyin": "xiekelv", 854 | "lightSuitable": true, 855 | "darkSuitable": false 856 | }, 857 | { 858 | "CMYK": [42, 64, 94, 60], 859 | "RGB": [83, 60, 27], 860 | "hex": "#533c1b", 861 | "name": "古铜绿", 862 | "pinyin": "gutonglv", 863 | "lightSuitable": true, 864 | "darkSuitable": false 865 | }, 866 | { 867 | "CMYK": [41, 66, 94, 60], 868 | "RGB": [85, 59, 24], 869 | "hex": "#553b18", 870 | "name": "焦茶绿", 871 | "pinyin": "jiaochalv", 872 | "lightSuitable": true, 873 | "darkSuitable": false 874 | }, 875 | { 876 | "CMYK": [1, 7, 13, 0], 877 | "RGB": [251, 242, 227], 878 | "hex": "#fbf2e3", 879 | "name": "粉白", 880 | "pinyin": "fenbai", 881 | "lightSuitable": false, 882 | "darkSuitable": true 883 | }, 884 | { 885 | "CMYK": [1, 12, 22, 0], 886 | "RGB": [249, 232, 208], 887 | "hex": "#f9e8d0", 888 | "name": "落英淡粉", 889 | "pinyin": "luoyingdanfen", 890 | "lightSuitable": false, 891 | "darkSuitable": true 892 | }, 893 | { 894 | "CMYK": [0, 27, 51, 0], 895 | "RGB": [249, 203, 139], 896 | "hex": "#f9cb8b", 897 | "name": "瓜瓤粉", 898 | "pinyin": "guarangfen", 899 | "lightSuitable": false, 900 | "darkSuitable": true 901 | }, 902 | { 903 | "CMYK": [0, 36, 72, 0], 904 | "RGB": [251, 185, 87], 905 | "hex": "#fbb957", 906 | "name": "蜜黄", 907 | "pinyin": "mihuang", 908 | "lightSuitable": false, 909 | "darkSuitable": true 910 | }, 911 | { 912 | "CMYK": [0, 44, 91, 0], 913 | "RGB": [255, 166, 15], 914 | "hex": "#ffa60f", 915 | "name": "金叶黄", 916 | "pinyin": "jinyehuang", 917 | "lightSuitable": false, 918 | "darkSuitable": true 919 | }, 920 | { 921 | "CMYK": [0, 43, 82, 0], 922 | "RGB": [244, 168, 58], 923 | "hex": "#f4a83a", 924 | "name": "金莺黄", 925 | "pinyin": "jinyinghuang", 926 | "lightSuitable": false, 927 | "darkSuitable": true 928 | }, 929 | { 930 | "CMYK": [8, 31, 50, 1], 931 | "RGB": [227, 189, 141], 932 | "hex": "#e3bd8d", 933 | "name": "鹿角棕", 934 | "pinyin": "lujiaozong", 935 | "lightSuitable": false, 936 | "darkSuitable": true 937 | }, 938 | { 939 | "CMYK": [2, 44, 83, 0], 940 | "RGB": [231, 162, 63], 941 | "hex": "#e7a23f", 942 | "name": "凋叶棕", 943 | "pinyin": "diaoyezong", 944 | "lightSuitable": false, 945 | "darkSuitable": true 946 | }, 947 | { 948 | "CMYK": [10, 41, 72, 1], 949 | "RGB": [218, 164, 90], 950 | "hex": "#daa45a", 951 | "name": "玳瑁黄", 952 | "pinyin": "daimaohuang", 953 | "lightSuitable": false, 954 | "darkSuitable": true 955 | }, 956 | { 957 | "CMYK": [7, 45, 82, 1], 958 | "RGB": [222, 158, 68], 959 | "hex": "#de9e44", 960 | "name": "软木黄", 961 | "pinyin": "ruanmuhuang", 962 | "lightSuitable": false, 963 | "darkSuitable": true 964 | }, 965 | { 966 | "CMYK": [6, 51, 95, 1], 967 | "RGB": [220, 145, 35], 968 | "hex": "#dc9123", 969 | "name": "风帆黄", 970 | "pinyin": "fengfanhuang", 971 | "lightSuitable": false, 972 | "darkSuitable": true 973 | }, 974 | { 975 | "CMYK": [19, 44, 75, 7], 976 | "RGB": [192, 147, 81], 977 | "hex": "#c09351", 978 | "name": "桂皮淡棕", 979 | "pinyin": "guipidanzong", 980 | "lightSuitable": false, 981 | "darkSuitable": true 982 | }, 983 | { 984 | "CMYK": [32, 40, 53, 22], 985 | "RGB": [151, 132, 108], 986 | "hex": "#97846c", 987 | "name": "猴毛灰", 988 | "pinyin": "houmaohui", 989 | "lightSuitable": false, 990 | "darkSuitable": true 991 | }, 992 | { 993 | "CMYK": [27, 60, 97, 21], 994 | "RGB": [152, 101, 36], 995 | "hex": "#986524", 996 | "name": "山鸡褐", 997 | "pinyin": "shanjihe", 998 | "lightSuitable": true, 999 | "darkSuitable": false 1000 | }, 1001 | { 1002 | "CMYK": [37, 65, 84, 49], 1003 | "RGB": [102, 70, 42], 1004 | "hex": "#66462a", 1005 | "name": "驼色", 1006 | "pinyin": "tuose", 1007 | "lightSuitable": true, 1008 | "darkSuitable": false 1009 | }, 1010 | { 1011 | "CMYK": [38, 69, 90, 54], 1012 | "RGB": [93, 61, 33], 1013 | "hex": "#5d3d21", 1014 | "name": "茶褐", 1015 | "pinyin": "chahe", 1016 | "lightSuitable": true, 1017 | "darkSuitable": false 1018 | }, 1019 | { 1020 | "CMYK": [37, 74, 96, 55], 1021 | "RGB": [92, 55, 25], 1022 | "hex": "#5c3719", 1023 | "name": "古铜褐", 1024 | "pinyin": "gutonghe", 1025 | "lightSuitable": true, 1026 | "darkSuitable": false 1027 | }, 1028 | { 1029 | "CMYK": [0, 10, 14, 0], 1030 | "RGB": [251, 236, 222], 1031 | "hex": "#fbecde", 1032 | "name": "荷花白", 1033 | "pinyin": "hehuabai", 1034 | "lightSuitable": false, 1035 | "darkSuitable": true 1036 | }, 1037 | { 1038 | "CMYK": [0, 40, 52, 0], 1039 | "RGB": [248, 179, 127], 1040 | "hex": "#f8b37f", 1041 | "name": "玫瑰粉", 1042 | "pinyin": "meiguifen", 1043 | "lightSuitable": false, 1044 | "darkSuitable": true 1045 | }, 1046 | { 1047 | "CMYK": [0, 62, 88, 0], 1048 | "RGB": [249, 125, 28], 1049 | "hex": "#f97d1c", 1050 | "name": "橘橙", 1051 | "pinyin": "jucheng", 1052 | "lightSuitable": false, 1053 | "darkSuitable": true 1054 | }, 1055 | { 1056 | "CMYK": [0, 62, 85, 0], 1057 | "RGB": [250, 126, 35], 1058 | "hex": "#fa7e23", 1059 | "name": "美人焦橙", 1060 | "pinyin": "meirenjiaocheng", 1061 | "lightSuitable": false, 1062 | "darkSuitable": true 1063 | }, 1064 | { 1065 | "CMYK": [0, 28, 25, 0], 1066 | "RGB": [247, 205, 188], 1067 | "hex": "#f7cdbc", 1068 | "name": "润红", 1069 | "pinyin": "runhong", 1070 | "lightSuitable": false, 1071 | "darkSuitable": true 1072 | }, 1073 | { 1074 | "CMYK": [0, 28, 22, 0], 1075 | "RGB": [246, 206, 193], 1076 | "hex": "#f6cec1", 1077 | "name": "淡桃红", 1078 | "pinyin": "dantaohong", 1079 | "lightSuitable": false, 1080 | "darkSuitable": true 1081 | }, 1082 | { 1083 | "CMYK": [0, 53, 65, 0], 1084 | "RGB": [240, 148, 93], 1085 | "hex": "#f0945d", 1086 | "name": "海螺橙", 1087 | "pinyin": "hailuocheng", 1088 | "lightSuitable": false, 1089 | "darkSuitable": true 1090 | }, 1091 | { 1092 | "CMYK": [0, 44, 32, 0], 1093 | "RGB": [240, 173, 160], 1094 | "hex": "#f0ada0", 1095 | "name": "桃红", 1096 | "pinyin": "taohong", 1097 | "lightSuitable": false, 1098 | "darkSuitable": true 1099 | }, 1100 | { 1101 | "CMYK": [0, 45, 34, 0], 1102 | "RGB": [238, 170, 156], 1103 | "hex": "#eeaa9c", 1104 | "name": "颊红", 1105 | "pinyin": "jiahong", 1106 | "lightSuitable": false, 1107 | "darkSuitable": true 1108 | }, 1109 | { 1110 | "CMYK": [0, 49, 41, 0], 1111 | "RGB": [238, 160, 140], 1112 | "hex": "#eea08c", 1113 | "name": "淡罂粟红", 1114 | "pinyin": "danyingsuhong", 1115 | "lightSuitable": false, 1116 | "darkSuitable": true 1117 | }, 1118 | { 1119 | "CMYK": [0, 58, 67, 0], 1120 | "RGB": [234, 137, 88], 1121 | "hex": "#ea8958", 1122 | "name": "晨曦红", 1123 | "pinyin": "chenxihong", 1124 | "lightSuitable": false, 1125 | "darkSuitable": true 1126 | }, 1127 | { 1128 | "CMYK": [0, 65, 80, 0], 1129 | "RGB": [242, 118, 53], 1130 | "hex": "#f27635", 1131 | "name": "蟹壳红", 1132 | "pinyin": "xiekehong", 1133 | "lightSuitable": false, 1134 | "darkSuitable": true 1135 | }, 1136 | { 1137 | "CMYK": [0, 69, 86, 0], 1138 | "RGB": [248, 107, 29], 1139 | "hex": "#f86b1d", 1140 | "name": "金莲花橙", 1141 | "pinyin": "jinlianhuacheng", 1142 | "lightSuitable": false, 1143 | "darkSuitable": true 1144 | }, 1145 | { 1146 | "CMYK": [0, 69, 70, 0], 1147 | "RGB": [239, 111, 72], 1148 | "hex": "#ef6f48", 1149 | "name": "草莓红", 1150 | "pinyin": "caomeihong", 1151 | "lightSuitable": false, 1152 | "darkSuitable": true 1153 | }, 1154 | { 1155 | "CMYK": [0, 72, 82, 0], 1156 | "RGB": [239, 99, 43], 1157 | "hex": "#ef632b", 1158 | "name": "龙睛鱼红", 1159 | "pinyin": "longjingyuhong", 1160 | "lightSuitable": false, 1161 | "darkSuitable": true 1162 | }, 1163 | { 1164 | "CMYK": [0, 81, 84, 0], 1165 | "RGB": [241, 68, 29], 1166 | "hex": "#f1441d", 1167 | "name": "蜻蜓红", 1168 | "pinyin": "qingtinghong", 1169 | "lightSuitable": true, 1170 | "darkSuitable": true 1171 | }, 1172 | { 1173 | "CMYK": [0, 80, 83, 0], 1174 | "RGB": [240, 75, 34], 1175 | "hex": "#f04b22", 1176 | "name": "大红", 1177 | "pinyin": "dahong", 1178 | "lightSuitable": false, 1179 | "darkSuitable": true 1180 | }, 1181 | { 1182 | "CMYK": [0, 80, 85, 0], 1183 | "RGB": [242, 72, 27], 1184 | "hex": "#f2481b", 1185 | "name": "柿红", 1186 | "pinyin": "shihong", 1187 | "lightSuitable": false, 1188 | "darkSuitable": true 1189 | }, 1190 | { 1191 | "CMYK": [0, 80, 85, 0], 1192 | "RGB": [243, 71, 24], 1193 | "hex": "#f34718", 1194 | "name": "榴花红", 1195 | "pinyin": "liuhuahong", 1196 | "lightSuitable": false, 1197 | "darkSuitable": true 1198 | }, 1199 | { 1200 | "CMYK": [0, 83, 87, 0], 1201 | "RGB": [244, 62, 6], 1202 | "hex": "#f43e06", 1203 | "name": "银朱", 1204 | "pinyin": "yinzhu", 1205 | "lightSuitable": true, 1206 | "darkSuitable": true 1207 | }, 1208 | { 1209 | "CMYK": [0, 78, 83, 0], 1210 | "RGB": [237, 81, 38], 1211 | "hex": "#ed5126", 1212 | "name": "朱红", 1213 | "pinyin": "zhuhong", 1214 | "lightSuitable": false, 1215 | "darkSuitable": true 1216 | }, 1217 | { 1218 | "CMYK": [0, 50, 68, 0], 1219 | "RGB": [240, 156, 90], 1220 | "hex": "#f09c5a", 1221 | "name": "鲑鱼红", 1222 | "pinyin": "guiyuhong", 1223 | "lightSuitable": false, 1224 | "darkSuitable": true 1225 | }, 1226 | { 1227 | "CMYK": [5, 69, 87, 0], 1228 | "RGB": [242, 123, 31], 1229 | "hex": "#f26b1f", 1230 | "name": "金黄", 1231 | "pinyin": "jinhuang", 1232 | "lightSuitable": false, 1233 | "darkSuitable": true 1234 | }, 1235 | { 1236 | "CMYK": [7, 52, 71, 1], 1237 | "RGB": [217, 145, 86], 1238 | "hex": "#d99156", 1239 | "name": "鹿皮褐", 1240 | "pinyin": "lupihe", 1241 | "lightSuitable": false, 1242 | "darkSuitable": true 1243 | }, 1244 | { 1245 | "CMYK": [4, 57, 82, 1], 1246 | "RGB": [219, 133, 64], 1247 | "hex": "#db8540", 1248 | "name": "醉瓜肉", 1249 | "pinyin": "zuiguarou", 1250 | "lightSuitable": false, 1251 | "darkSuitable": true 1252 | }, 1253 | { 1254 | "CMYK": [0, 64, 93, 0], 1255 | "RGB": [222, 118, 34], 1256 | "hex": "#de7622", 1257 | "name": "麂棕", 1258 | "pinyin": "jizong", 1259 | "lightSuitable": false, 1260 | "darkSuitable": true 1261 | }, 1262 | { 1263 | "CMYK": [22, 28, 34, 6], 1264 | "RGB": [193, 178, 163], 1265 | "hex": "#c1b2a3", 1266 | "name": "淡银灰", 1267 | "pinyin": "danyinhui", 1268 | "lightSuitable": false, 1269 | "darkSuitable": true 1270 | }, 1271 | { 1272 | "CMYK": [18, 57, 76, 6], 1273 | "RGB": [190, 126, 74], 1274 | "hex": "#be7e4a", 1275 | "name": "淡赭", 1276 | "pinyin": "danzhe", 1277 | "lightSuitable": false, 1278 | "darkSuitable": true 1279 | }, 1280 | { 1281 | "CMYK": [14, 69, 100, 4], 1282 | "RGB": [193, 101, 26], 1283 | "hex": "#c1651a", 1284 | "name": "槟榔棕", 1285 | "pinyin": "binglangzong", 1286 | "lightSuitable": true, 1287 | "darkSuitable": true 1288 | }, 1289 | { 1290 | "CMYK": [34, 42, 46, 23], 1291 | "RGB": [145, 128, 114], 1292 | "hex": "#918072", 1293 | "name": "银灰", 1294 | "pinyin": "yinhui", 1295 | "lightSuitable": true, 1296 | "darkSuitable": true 1297 | }, 1298 | { 1299 | "CMYK": [42, 40, 46, 20], 1300 | "RGB": [154, 136, 120], 1301 | "hex": "#9a8878", 1302 | "name": "海鸥灰", 1303 | "pinyin": "haiouhui", 1304 | "lightSuitable": false, 1305 | "darkSuitable": true 1306 | }, 1307 | { 1308 | "CMYK": [27, 69, 85, 22], 1309 | "RGB": [148, 88, 51], 1310 | "hex": "#945833", 1311 | "name": "淡咖啡", 1312 | "pinyin": "dankafei", 1313 | "lightSuitable": true, 1314 | "darkSuitable": false 1315 | }, 1316 | { 1317 | "CMYK": [26, 76, 97, 20], 1318 | "RGB": [150, 77, 34], 1319 | "hex": "#964d22", 1320 | "name": "岩石棕", 1321 | "pinyin": "yanshizong", 1322 | "lightSuitable": true, 1323 | "darkSuitable": false 1324 | }, 1325 | { 1326 | "CMYK": [25, 80, 100, 20], 1327 | "RGB": [149, 68, 22], 1328 | "hex": "#954416", 1329 | "name": "芒果棕", 1330 | "pinyin": "mangguozong", 1331 | "lightSuitable": true, 1332 | "darkSuitable": false 1333 | }, 1334 | { 1335 | "CMYK": [39, 60, 58, 51], 1336 | "RGB": [98, 73, 65], 1337 | "hex": "#624941", 1338 | "name": "石板灰", 1339 | "pinyin": "shibanhui", 1340 | "lightSuitable": true, 1341 | "darkSuitable": false 1342 | }, 1343 | { 1344 | "CMYK": [38, 63, 63, 50], 1345 | "RGB": [100, 72, 61], 1346 | "hex": "#64483d", 1347 | "name": "珠母灰", 1348 | "pinyin": "zhumuhui", 1349 | "lightSuitable": true, 1350 | "darkSuitable": false 1351 | }, 1352 | { 1353 | "CMYK": [32, 83, 96, 41], 1354 | "RGB": [113, 54, 29], 1355 | "hex": "#71361d", 1356 | "name": "丁香棕", 1357 | "pinyin": "dingxiangzong", 1358 | "lightSuitable": true, 1359 | "darkSuitable": false 1360 | }, 1361 | { 1362 | "CMYK": [30, 87, 100, 38], 1363 | "RGB": [117, 49, 23], 1364 | "hex": "#753117", 1365 | "name": "咖啡", 1366 | "pinyin": "kafei", 1367 | "lightSuitable": true, 1368 | "darkSuitable": false 1369 | }, 1370 | { 1371 | "CMYK": [30, 89, 100, 39], 1372 | "RGB": [115, 46, 18], 1373 | "hex": "#732e12", 1374 | "name": "筍皮棕", 1375 | "pinyin": "sunpizong", 1376 | "lightSuitable": true, 1377 | "darkSuitable": false 1378 | }, 1379 | { 1380 | "CMYK": [0, 72, 86, 0], 1381 | "RGB": [252, 99, 21], 1382 | "hex": "#fc6315", 1383 | "name": "燕颔红", 1384 | "pinyin": "yanhanhong", 1385 | "lightSuitable": false, 1386 | "darkSuitable": true 1387 | }, 1388 | { 1389 | "CMYK": [3, 38, 39, 0], 1390 | "RGB": [232, 180, 154], 1391 | "hex": "#e8b49a", 1392 | "name": "玉粉红", 1393 | "pinyin": "yufenhong", 1394 | "lightSuitable": false, 1395 | "darkSuitable": true 1396 | }, 1397 | { 1398 | "CMYK": [0, 70, 87, 0], 1399 | "RGB": [228, 104, 40], 1400 | "hex": "#e46828", 1401 | "name": "金驼", 1402 | "pinyin": "jintuo", 1403 | "lightSuitable": false, 1404 | "darkSuitable": true 1405 | }, 1406 | { 1407 | "CMYK": [0, 76, 97, 0], 1408 | "RGB": [216, 89, 22], 1409 | "hex": "#d85916", 1410 | "name": "铁棕", 1411 | "pinyin": "tiezong", 1412 | "lightSuitable": true, 1413 | "darkSuitable": true 1414 | }, 1415 | { 1416 | "CMYK": [23, 35, 38, 10], 1417 | "RGB": [183, 160, 145], 1418 | "hex": "#b7a091", 1419 | "name": "蛛网灰", 1420 | "pinyin": "zhuwanghui", 1421 | "lightSuitable": false, 1422 | "darkSuitable": true 1423 | }, 1424 | { 1425 | "CMYK": [16, 77, 100, 6], 1426 | "RGB": [183, 81, 29], 1427 | "hex": "#b7511d", 1428 | "name": "淡可可棕", 1429 | "pinyin": "dankekezong", 1430 | "lightSuitable": true, 1431 | "darkSuitable": false 1432 | }, 1433 | { 1434 | "CMYK": [31, 63, 66, 31], 1435 | "RGB": [139, 97, 77], 1436 | "hex": "#8b614d", 1437 | "name": "中红灰", 1438 | "pinyin": "zhonghonghui", 1439 | "lightSuitable": true, 1440 | "darkSuitable": false 1441 | }, 1442 | { 1443 | "CMYK": [28, 76, 82, 26], 1444 | "RGB": [140, 75, 49], 1445 | "hex": "#8c4b31", 1446 | "name": "淡土黄", 1447 | "pinyin": "dantuhuang", 1448 | "lightSuitable": true, 1449 | "darkSuitable": false 1450 | }, 1451 | { 1452 | "CMYK": [28, 83, 92, 28], 1453 | "RGB": [135, 61, 36], 1454 | "hex": "#873d24", 1455 | "name": "淡豆沙", 1456 | "pinyin": "dandousha", 1457 | "lightSuitable": true, 1458 | "darkSuitable": false 1459 | }, 1460 | { 1461 | "CMYK": [27, 85, 98, 27], 1462 | "RGB": [136, 58, 30], 1463 | "hex": "#883a1e", 1464 | "name": "椰壳棕", 1465 | "pinyin": "yekezong", 1466 | "lightSuitable": true, 1467 | "darkSuitable": false 1468 | }, 1469 | { 1470 | "CMYK": [40, 64, 61, 56], 1471 | "RGB": [91, 66, 58], 1472 | "hex": "#5b423a", 1473 | "name": "淡铁灰", 1474 | "pinyin": "dantiehui", 1475 | "lightSuitable": true, 1476 | "darkSuitable": false 1477 | }, 1478 | { 1479 | "CMYK": [37, 72, 72, 52], 1480 | "RGB": [96, 61, 48], 1481 | "hex": "#603d30", 1482 | "name": "中灰驼", 1483 | "pinyin": "zhonghuituo", 1484 | "lightSuitable": true, 1485 | "darkSuitable": false 1486 | }, 1487 | { 1488 | "CMYK": [34, 82, 85, 47], 1489 | "RGB": [103, 52, 36], 1490 | "hex": "#673424", 1491 | "name": "淡栗棕", 1492 | "pinyin": "danlizong", 1493 | "lightSuitable": true, 1494 | "darkSuitable": false 1495 | }, 1496 | { 1497 | "CMYK": [33, 89, 92, 48], 1498 | "RGB": [101, 43, 28], 1499 | "hex": "#652b1c", 1500 | "name": "可可棕", 1501 | "pinyin": "kekezong", 1502 | "lightSuitable": true, 1503 | "darkSuitable": false 1504 | }, 1505 | { 1506 | "CMYK": [32, 90, 95, 45], 1507 | "RGB": [105, 42, 27], 1508 | "hex": "#692a1b", 1509 | "name": "柞叶棕", 1510 | "pinyin": "zhayezong", 1511 | "lightSuitable": true, 1512 | "darkSuitable": false 1513 | }, 1514 | { 1515 | "CMYK": [0, 53, 59, 0], 1516 | "RGB": [251, 153, 104], 1517 | "hex": "#fb9968", 1518 | "name": "野蔷薇红", 1519 | "pinyin": "yeqiangweihong", 1520 | "lightSuitable": false, 1521 | "darkSuitable": true 1522 | }, 1523 | { 1524 | "CMYK": [0, 65, 79, 0], 1525 | "RGB": [252, 121, 48], 1526 | "hex": "#fc7930", 1527 | "name": "菠萝红", 1528 | "pinyin": "boluohong", 1529 | "lightSuitable": false, 1530 | "darkSuitable": true 1531 | }, 1532 | { 1533 | "CMYK": [2, 31, 31, 0], 1534 | "RGB": [237, 195, 174], 1535 | "hex": "#edc3ae", 1536 | "name": "藕荷", 1537 | "pinyin": "ouhe", 1538 | "lightSuitable": false, 1539 | "darkSuitable": true 1540 | }, 1541 | { 1542 | "CMYK": [0, 70, 91, 0], 1543 | "RGB": [225, 103, 35], 1544 | "hex": "#e16723", 1545 | "name": "陶瓷红", 1546 | "pinyin": "taocihong", 1547 | "lightSuitable": false, 1548 | "darkSuitable": true 1549 | }, 1550 | { 1551 | "CMYK": [16, 23, 27, 2], 1552 | "RGB": [212, 196, 183], 1553 | "hex": "#d4c4b7", 1554 | "name": "晓灰", 1555 | "pinyin": "xiaohui", 1556 | "lightSuitable": false, 1557 | "darkSuitable": true 1558 | }, 1559 | { 1560 | "CMYK": [9, 64, 78, 1], 1561 | "RGB": [207, 117, 67], 1562 | "hex": "#cf7543", 1563 | "name": "余烬红", 1564 | "pinyin": "yujinhong", 1565 | "lightSuitable": false, 1566 | "darkSuitable": true 1567 | }, 1568 | { 1569 | "CMYK": [8, 72, 93, 1], 1570 | "RGB": [205, 98, 39], 1571 | "hex": "#cd6227", 1572 | "name": "火砖红", 1573 | "pinyin": "huozhuanhong", 1574 | "lightSuitable": true, 1575 | "darkSuitable": true 1576 | }, 1577 | { 1578 | "CMYK": [22, 64, 71, 12], 1579 | "RGB": [170, 106, 76], 1580 | "hex": "#aa6a4c", 1581 | "name": "火泥棕", 1582 | "pinyin": "huonizong", 1583 | "lightSuitable": true, 1584 | "darkSuitable": false 1585 | }, 1586 | { 1587 | "CMYK": [20, 76, 92, 9], 1588 | "RGB": [166, 82, 44], 1589 | "hex": "#a6522c", 1590 | "name": "绀红", 1591 | "pinyin": "ganhong", 1592 | "lightSuitable": true, 1593 | "darkSuitable": false 1594 | }, 1595 | { 1596 | "CMYK": [31, 79, 77, 37], 1597 | "RGB": [119, 61, 49], 1598 | "hex": "#773d31", 1599 | "name": "橡树棕", 1600 | "pinyin": "xiangshuzong", 1601 | "lightSuitable": true, 1602 | "darkSuitable": false 1603 | }, 1604 | { 1605 | "CMYK": [45, 68, 57, 66], 1606 | "RGB": [72, 51, 50], 1607 | "hex": "#483332", 1608 | "name": "海报灰", 1609 | "pinyin": "haibaohui", 1610 | "lightSuitable": true, 1611 | "darkSuitable": false 1612 | }, 1613 | { 1614 | "CMYK": [41, 76, 64, 65], 1615 | "RGB": [175, 46, 43], 1616 | "hex": "#4b2e2b", 1617 | "name": "玫瑰灰", 1618 | "pinyin": "meiguihui", 1619 | "lightSuitable": true, 1620 | "darkSuitable": false 1621 | }, 1622 | { 1623 | "CMYK": [41, 84, 71, 67], 1624 | "RGB": [72, 37, 34], 1625 | "hex": "#482522", 1626 | "name": "火山棕", 1627 | "pinyin": "huoshanzong", 1628 | "lightSuitable": true, 1629 | "darkSuitable": false 1630 | }, 1631 | { 1632 | "CMYK": [40, 92, 78, 66], 1633 | "RGB": [72, 30, 28], 1634 | "hex": "#481e1c", 1635 | "name": "豆沙", 1636 | "pinyin": "dousha", 1637 | "lightSuitable": true, 1638 | "darkSuitable": false 1639 | }, 1640 | { 1641 | "CMYK": [0, 9, 12, 0], 1642 | "RGB": [251, 238, 226], 1643 | "hex": "#fbeee2", 1644 | "name": "淡米粉", 1645 | "pinyin": "danmifen", 1646 | "lightSuitable": false, 1647 | "darkSuitable": true 1648 | }, 1649 | { 1650 | "CMYK": [0, 19, 19, 0], 1651 | "RGB": [246, 220, 206], 1652 | "hex": "#f6dcce", 1653 | "name": "初桃粉红", 1654 | "pinyin": "chutaofenhong", 1655 | "lightSuitable": false, 1656 | "darkSuitable": true 1657 | }, 1658 | { 1659 | "CMYK": [0, 27, 27, 0], 1660 | "RGB": [247, 207, 186], 1661 | "hex": "#f7cfba", 1662 | "name": "介壳淡粉红", 1663 | "pinyin": "jieqiaodanfenhong", 1664 | "lightSuitable": false, 1665 | "darkSuitable": true 1666 | }, 1667 | { 1668 | "CMYK": [0, 43, 43, 0], 1669 | "RGB": [246, 173, 143], 1670 | "hex": "#f6ad8f", 1671 | "name": "淡藏花红", 1672 | "pinyin": "dancanghuahong", 1673 | "lightSuitable": false, 1674 | "darkSuitable": true 1675 | }, 1676 | { 1677 | "CMYK": [0, 58, 61, 0], 1678 | "RGB": [246, 140, 96], 1679 | "hex": "#f68c60", 1680 | "name": "瓜瓤红", 1681 | "pinyin": "guaranghong", 1682 | "lightSuitable": false, 1683 | "darkSuitable": true 1684 | }, 1685 | { 1686 | "CMYK": [0, 67, 74, 0], 1687 | "RGB": [249, 114, 61], 1688 | "hex": "#f9723d", 1689 | "name": "芙蓉红", 1690 | "pinyin": "furonghong", 1691 | "lightSuitable": false, 1692 | "darkSuitable": true 1693 | }, 1694 | { 1695 | "CMYK": [0, 74, 85, 0], 1696 | "RGB": [250, 93, 25], 1697 | "hex": "#fa5d19", 1698 | "name": "莓酱红", 1699 | "pinyin": "meijianghong", 1700 | "lightSuitable": false, 1701 | "darkSuitable": true 1702 | }, 1703 | { 1704 | "CMYK": [0, 62, 66, 0], 1705 | "RGB": [238, 128, 85], 1706 | "hex": "#ee8055", 1707 | "name": "法螺红", 1708 | "pinyin": "faluohong", 1709 | "lightSuitable": false, 1710 | "darkSuitable": true 1711 | }, 1712 | { 1713 | "CMYK": [4, 82, 99, 0], 1714 | "RGB": [207, 72, 19], 1715 | "hex": "#cf4813", 1716 | "name": "落霞红", 1717 | "pinyin": "luoxiahong", 1718 | "lightSuitable": true, 1719 | "darkSuitable": false 1720 | }, 1721 | { 1722 | "CMYK": [21, 43, 43, 9], 1723 | "RGB": [184, 148, 133], 1724 | "hex": "#b89485", 1725 | "name": "淡玫瑰灰", 1726 | "pinyin": "danmeiguihui", 1727 | "lightSuitable": false, 1728 | "darkSuitable": true 1729 | }, 1730 | { 1731 | "CMYK": [18, 80, 92, 7], 1732 | "RGB": [177, 75, 40], 1733 | "hex": "#b14b28", 1734 | "name": "蟹蝥红", 1735 | "pinyin": "xiemaohong", 1736 | "lightSuitable": true, 1737 | "darkSuitable": false 1738 | }, 1739 | { 1740 | "CMYK": [27, 91, 95, 28], 1741 | "RGB": [134, 48, 32], 1742 | "hex": "#863020", 1743 | "name": "火岩棕", 1744 | "pinyin": "huoyanzong", 1745 | "lightSuitable": true, 1746 | "darkSuitable": false 1747 | }, 1748 | { 1749 | "CMYK": [27, 96, 100, 27], 1750 | "RGB": [134, 38, 23], 1751 | "hex": "#862617", 1752 | "name": "赭石", 1753 | "pinyin": "zheshi", 1754 | "lightSuitable": true, 1755 | "darkSuitable": false 1756 | }, 1757 | { 1758 | "CMYK": [36, 90, 82, 56], 1759 | "RGB": [89, 38, 32], 1760 | "hex": "#592620", 1761 | "name": "暗驼棕", 1762 | "pinyin": "antuozong", 1763 | "lightSuitable": true, 1764 | "darkSuitable": false 1765 | }, 1766 | { 1767 | "CMYK": [35, 96, 88, 55], 1768 | "RGB": [90, 31, 27], 1769 | "hex": "#5a1f1b", 1770 | "name": "酱棕", 1771 | "pinyin": "jiangzong", 1772 | "lightSuitable": true, 1773 | "darkSuitable": false 1774 | }, 1775 | { 1776 | "CMYK": [34, 98, 91, 53], 1777 | "RGB": [92, 30, 25], 1778 | "hex": "#5c1e19", 1779 | "name": "栗棕", 1780 | "pinyin": "lizong", 1781 | "lightSuitable": true, 1782 | "darkSuitable": false 1783 | }, 1784 | { 1785 | "CMYK": [0, 31, 24, 0], 1786 | "RGB": [244, 199, 186], 1787 | "hex": "#f4c7ba", 1788 | "name": "洋水仙红", 1789 | "pinyin": "yangshuixianhong", 1790 | "lightSuitable": false, 1791 | "darkSuitable": true 1792 | }, 1793 | { 1794 | "CMYK": [0, 67, 55, 0], 1795 | "RGB": [241, 118, 102], 1796 | "hex": "#f17666", 1797 | "name": "谷鞘红", 1798 | "pinyin": "guqiaohong", 1799 | "lightSuitable": false, 1800 | "darkSuitable": true 1801 | }, 1802 | { 1803 | "CMYK": [0, 77, 69, 0], 1804 | "RGB": [241, 86, 66], 1805 | "hex": "#f15642", 1806 | "name": "苹果红", 1807 | "pinyin": "pingguohong", 1808 | "lightSuitable": false, 1809 | "darkSuitable": true 1810 | }, 1811 | { 1812 | "CMYK": [0, 84, 82, 0], 1813 | "RGB": [245, 57, 28], 1814 | "hex": "#f5391c", 1815 | "name": "铁水红", 1816 | "pinyin": "tieshuihong", 1817 | "lightSuitable": true, 1818 | "darkSuitable": true 1819 | }, 1820 | { 1821 | "CMYK": [0, 76, 67, 0], 1822 | "RGB": [242, 90, 71], 1823 | "hex": "#f25a47", 1824 | "name": "桂红", 1825 | "pinyin": "guihong", 1826 | "lightSuitable": false, 1827 | "darkSuitable": true 1828 | }, 1829 | { 1830 | "CMYK": [0, 84, 82, 0], 1831 | "RGB": [243, 59, 31], 1832 | "hex": "#f33b1f", 1833 | "name": "极光红", 1834 | "pinyin": "jiguanghong", 1835 | "lightSuitable": true, 1836 | "darkSuitable": true 1837 | }, 1838 | { 1839 | "CMYK": [0, 38, 25, 0], 1840 | "RGB": [242, 185, 178], 1841 | "hex": "#f2b9b2", 1842 | "name": "粉红", 1843 | "pinyin": "fenhong", 1844 | "lightSuitable": false, 1845 | "darkSuitable": true 1846 | }, 1847 | { 1848 | "CMYK": [0, 53, 36, 0], 1849 | "RGB": [241, 151, 144], 1850 | "hex": "#f19790", 1851 | "name": "舌红", 1852 | "pinyin": "shehong", 1853 | "lightSuitable": false, 1854 | "darkSuitable": true 1855 | }, 1856 | { 1857 | "CMYK": [0, 76, 68, 0], 1858 | "RGB": [240, 90, 70], 1859 | "hex": "#f05a46", 1860 | "name": "曲红", 1861 | "pinyin": "quhong", 1862 | "lightSuitable": false, 1863 | "darkSuitable": true 1864 | }, 1865 | { 1866 | "CMYK": [0, 83, 81, 0], 1867 | "RGB": [242, 62, 35], 1868 | "hex": "#f23e23", 1869 | "name": "红汞红", 1870 | "pinyin": "honggonghong", 1871 | "lightSuitable": true, 1872 | "darkSuitable": true 1873 | }, 1874 | { 1875 | "CMYK": [0, 29, 16, 0], 1876 | "RGB": [242, 202, 201], 1877 | "hex": "#f2cac9", 1878 | "name": "淡绯", 1879 | "pinyin": "danfei", 1880 | "lightSuitable": false, 1881 | "darkSuitable": true 1882 | }, 1883 | { 1884 | "CMYK": [0, 43, 24, 0], 1885 | "RGB": [239, 175, 173], 1886 | "hex": "#efafad", 1887 | "name": "无花果红", 1888 | "pinyin": "wuhuaguohong", 1889 | "lightSuitable": false, 1890 | "darkSuitable": true 1891 | }, 1892 | { 1893 | "CMYK": [0, 57, 36, 0], 1894 | "RGB": [241, 144, 140], 1895 | "hex": "#f1908c", 1896 | "name": "榴子红", 1897 | "pinyin": "liuzihong", 1898 | "lightSuitable": false, 1899 | "darkSuitable": true 1900 | }, 1901 | { 1902 | "CMYK": [0, 83, 81, 0], 1903 | "RGB": [240, 63, 36], 1904 | "hex": "#f03f24", 1905 | "name": "胭脂红", 1906 | "pinyin": "yanzhihong", 1907 | "lightSuitable": true, 1908 | "darkSuitable": true 1909 | }, 1910 | { 1911 | "CMYK": [0, 50, 23, 0], 1912 | "RGB": [240, 161, 168], 1913 | "hex": "#f0a1a8", 1914 | "name": "合欢红", 1915 | "pinyin": "hehuanhong", 1916 | "lightSuitable": false, 1917 | "darkSuitable": true 1918 | }, 1919 | { 1920 | "CMYK": [0, 56, 27, 0], 1921 | "RGB": [241, 147, 156], 1922 | "hex": "#f1939c", 1923 | "name": "春梅红", 1924 | "pinyin": "chunmeihong", 1925 | "lightSuitable": false, 1926 | "darkSuitable": true 1927 | }, 1928 | { 1929 | "CMYK": [0, 65, 38, 0], 1930 | "RGB": [240, 124, 130], 1931 | "hex": "#f07c82", 1932 | "name": "香叶红", 1933 | "pinyin": "xiangyehong", 1934 | "lightSuitable": false, 1935 | "darkSuitable": true 1936 | }, 1937 | { 1938 | "CMYK": [0, 80, 72, 0], 1939 | "RGB": [240, 74, 58], 1940 | "hex": "#f04a3a", 1941 | "name": "珊瑚红", 1942 | "pinyin": "shanhuhong", 1943 | "lightSuitable": false, 1944 | "darkSuitable": true 1945 | }, 1946 | { 1947 | "CMYK": [0, 84, 82, 0], 1948 | "RGB": [241, 60, 34], 1949 | "hex": "#f13c22", 1950 | "name": "萝卜红", 1951 | "pinyin": "luobohong", 1952 | "lightSuitable": true, 1953 | "darkSuitable": true 1954 | }, 1955 | { 1956 | "CMYK": [0, 65, 29, 0], 1957 | "RGB": [231, 124, 142], 1958 | "hex": "#e77c8e", 1959 | "name": "淡茜红", 1960 | "pinyin": "danqianhong", 1961 | "lightSuitable": false, 1962 | "darkSuitable": true 1963 | }, 1964 | { 1965 | "CMYK": [0, 77, 49, 0], 1966 | "RGB": [237, 90, 101], 1967 | "hex": "#ed5a65", 1968 | "name": "艳红", 1969 | "pinyin": "yanhong", 1970 | "lightSuitable": false, 1971 | "darkSuitable": true 1972 | }, 1973 | { 1974 | "CMYK": [0, 81, 66, 0], 1975 | "RGB": [237, 72, 69], 1976 | "hex": "#ed4845", 1977 | "name": "淡菽红", 1978 | "pinyin": "danshuhong", 1979 | "lightSuitable": false, 1980 | "darkSuitable": true 1981 | }, 1982 | { 1983 | "CMYK": [0, 84, 76, 0], 1984 | "RGB": [237, 59, 47], 1985 | "hex": "#ed3b2f", 1986 | "name": "鱼鳃红", 1987 | "pinyin": "yusaihong", 1988 | "lightSuitable": true, 1989 | "darkSuitable": true 1990 | }, 1991 | { 1992 | "CMYK": [0, 86, 82, 0], 1993 | "RGB": [237, 51, 33], 1994 | "hex": "#ed3321", 1995 | "name": "樱桃红", 1996 | "pinyin": "yingtaohong", 1997 | "lightSuitable": true, 1998 | "darkSuitable": true 1999 | }, 2000 | { 2001 | "CMYK": [0, 82, 44, 0], 2002 | "RGB": [238, 72, 102], 2003 | "hex": "#ee4866", 2004 | "name": "淡蕊香红", 2005 | "pinyin": "danruixianghong", 2006 | "lightSuitable": false, 2007 | "darkSuitable": true 2008 | }, 2009 | { 2010 | "CMYK": [0, 82, 46, 0], 2011 | "RGB": [238, 72, 99], 2012 | "hex": "#ee4863", 2013 | "name": "石竹红", 2014 | "pinyin": "shizhuhong", 2015 | "lightSuitable": false, 2016 | "darkSuitable": true 2017 | }, 2018 | { 2019 | "CMYK": [0, 82, 50, 0], 2020 | "RGB": [239, 71, 93], 2021 | "hex": "#ef475d", 2022 | "name": "草茉莉红", 2023 | "pinyin": "caomolihong", 2024 | "lightSuitable": false, 2025 | "darkSuitable": true 2026 | }, 2027 | { 2028 | "CMYK": [0, 84, 60, 0], 2029 | "RGB": [238, 63, 77], 2030 | "hex": "#ee3f4d", 2031 | "name": "茶花红", 2032 | "pinyin": "chahuahong", 2033 | "lightSuitable": true, 2034 | "darkSuitable": true 2035 | }, 2036 | { 2037 | "CMYK": [0, 86, 74, 0], 2038 | "RGB": [237, 51, 51], 2039 | "hex": "#ed3333", 2040 | "name": "枸枢红", 2041 | "pinyin": "goushuhong", 2042 | "lightSuitable": true, 2043 | "darkSuitable": true 2044 | }, 2045 | { 2046 | "CMYK": [0, 88, 81, 0], 2047 | "RGB": [236, 43, 36], 2048 | "hex": "#ec2b24", 2049 | "name": "秋海棠红", 2050 | "pinyin": "qiuhaitanghong", 2051 | "lightSuitable": true, 2052 | "darkSuitable": true 2053 | }, 2054 | { 2055 | "CMYK": [0, 89, 84, 0], 2056 | "RGB": [235, 38, 26], 2057 | "hex": "#eb261a", 2058 | "name": "丽春红", 2059 | "pinyin": "lichunhong", 2060 | "lightSuitable": true, 2061 | "darkSuitable": false 2062 | }, 2063 | { 2064 | "CMYK": [0, 90, 90, 0], 2065 | "RGB": [222, 42, 24], 2066 | "hex": "#de2a18", 2067 | "name": "夕阳红", 2068 | "pinyin": "xiyanghong", 2069 | "lightSuitable": true, 2070 | "darkSuitable": false 2071 | }, 2072 | { 2073 | "CMYK": [0, 92, 95, 0], 2074 | "RGB": [212, 37, 23], 2075 | "hex": "#d42517", 2076 | "name": "鹤顶红", 2077 | "pinyin": "hedinghong", 2078 | "lightSuitable": true, 2079 | "darkSuitable": false 2080 | }, 2081 | { 2082 | "CMYK": [19, 89, 85, 9], 2083 | "RGB": [171, 55, 47], 2084 | "hex": "#ab372f", 2085 | "name": "鹅血石红", 2086 | "pinyin": "exueshihong", 2087 | "lightSuitable": true, 2088 | "darkSuitable": false 2089 | }, 2090 | { 2091 | "CMYK": [17, 98, 100, 8], 2092 | "RGB": [172, 31, 24], 2093 | "hex": "#ac1f18", 2094 | "name": "覆盆子红", 2095 | "pinyin": "fupenzihong", 2096 | "lightSuitable": true, 2097 | "darkSuitable": false 2098 | }, 2099 | { 2100 | "CMYK": [36, 81, 64, 54], 2101 | "RGB": [93, 49, 49], 2102 | "hex": "#5d3131", 2103 | "name": "貂紫", 2104 | "pinyin": "diaozi", 2105 | "lightSuitable": true, 2106 | "darkSuitable": false 2107 | }, 2108 | { 2109 | "CMYK": [35, 94, 77, 53], 2110 | "RGB": [92, 34, 35], 2111 | "hex": "#5c2223", 2112 | "name": "暗玉紫", 2113 | "pinyin": "anyuzi", 2114 | "lightSuitable": true, 2115 | "darkSuitable": false 2116 | }, 2117 | { 2118 | "CMYK": [35, 100, 85, 54], 2119 | "RGB": [90, 25, 27], 2120 | "hex": "#5a191b", 2121 | "name": "栗紫", 2122 | "pinyin": "lizi", 2123 | "lightSuitable": true, 2124 | "darkSuitable": false 2125 | }, 2126 | { 2127 | "CMYK": [35, 100, 80, 54], 2128 | "RGB": [90, 18, 22], 2129 | "hex": "#5a1216", 2130 | "name": "葡萄酱紫", 2131 | "pinyin": "putaojiangzi", 2132 | "lightSuitable": true, 2133 | "darkSuitable": false 2134 | }, 2135 | { 2136 | "CMYK": [0, 49, 27, 0], 2137 | "RGB": [238, 162, 164], 2138 | "hex": "#eea2a4", 2139 | "name": "牡丹粉红", 2140 | "pinyin": "mudanfenhong", 2141 | "lightSuitable": false, 2142 | "darkSuitable": true 2143 | }, 2144 | { 2145 | "CMYK": [0, 78, 44, 0], 2146 | "RGB": [237, 85, 106], 2147 | "hex": "#ed556a", 2148 | "name": "山茶红", 2149 | "pinyin": "shanchahong", 2150 | "lightSuitable": false, 2151 | "darkSuitable": true 2152 | }, 2153 | { 2154 | "CMYK": [0, 86, 55, 0], 2155 | "RGB": [240, 55, 82], 2156 | "hex": "#f03752", 2157 | "name": "海棠红", 2158 | "pinyin": "haitanghong", 2159 | "lightSuitable": true, 2160 | "darkSuitable": true 2161 | }, 2162 | { 2163 | "CMYK": [13, 83, 62, 3], 2164 | "RGB": [192, 72, 81], 2165 | "hex": "#c04851", 2166 | "name": "玉红", 2167 | "pinyin": "yuhong", 2168 | "lightSuitable": true, 2169 | "darkSuitable": false 2170 | }, 2171 | { 2172 | "CMYK": [11, 93, 77, 2], 2173 | "RGB": [192, 44, 56], 2174 | "hex": "#c02c38", 2175 | "name": "高粱红", 2176 | "pinyin": "gaolianghong", 2177 | "lightSuitable": true, 2178 | "darkSuitable": false 2179 | }, 2180 | { 2181 | "CMYK": [22, 76, 54, 12], 2182 | "RGB": [167, 83, 90], 2183 | "hex": "#a7535a", 2184 | "name": "满江红", 2185 | "pinyin": "manjianghong", 2186 | "lightSuitable": true, 2187 | "darkSuitable": false 2188 | }, 2189 | { 2190 | "CMYK": [28, 100, 86, 33], 2191 | "RGB": [124, 24, 35], 2192 | "hex": "#7c1823", 2193 | "name": "枣红", 2194 | "pinyin": "zaohong", 2195 | "lightSuitable": true, 2196 | "darkSuitable": false 2197 | }, 2198 | { 2199 | "CMYK": [39, 92, 67, 64], 2200 | "RGB": [76, 31, 36], 2201 | "hex": "#4c1f24", 2202 | "name": "葡萄紫", 2203 | "pinyin": "putaozi", 2204 | "lightSuitable": true, 2205 | "darkSuitable": false 2206 | }, 2207 | { 2208 | "CMYK": [39, 100, 79, 63], 2209 | "RGB": [77, 16, 24], 2210 | "hex": "#4d1018", 2211 | "name": "酱紫", 2212 | "pinyin": "jiangzi", 2213 | "lightSuitable": true, 2214 | "darkSuitable": false 2215 | }, 2216 | { 2217 | "CMYK": [0, 89, 62, 0], 2218 | "RGB": [238, 39, 70], 2219 | "hex": "#ee2746", 2220 | "name": "淡曙红", 2221 | "pinyin": "danshuhong", 2222 | "lightSuitable": true, 2223 | "darkSuitable": true 2224 | }, 2225 | { 2226 | "CMYK": [0, 93, 76, 0], 2227 | "RGB": [222, 28, 49], 2228 | "hex": "#de1c31", 2229 | "name": "唐菖蒲红", 2230 | "pinyin": "tangchangpuhong", 2231 | "lightSuitable": true, 2232 | "darkSuitable": false 2233 | }, 2234 | { 2235 | "CMYK": [1, 95, 82, 0], 2236 | "RGB": [209, 26, 45], 2237 | "hex": "#d11a2d", 2238 | "name": "鹅冠红", 2239 | "pinyin": "eguanhong", 2240 | "lightSuitable": true, 2241 | "darkSuitable": false 2242 | }, 2243 | { 2244 | "CMYK": [13, 76, 50, 2], 2245 | "RGB": [196, 90, 101], 2246 | "hex": "#c45a65", 2247 | "name": "莓红", 2248 | "pinyin": "meihong", 2249 | "lightSuitable": true, 2250 | "darkSuitable": true 2251 | }, 2252 | { 2253 | "CMYK": [10, 96, 82, 2], 2254 | "RGB": [194, 31, 48], 2255 | "hex": "#c21f30", 2256 | "name": "枫叶红", 2257 | "pinyin": "fengyehong", 2258 | "lightSuitable": true, 2259 | "darkSuitable": false 2260 | }, 2261 | { 2262 | "CMYK": [19, 99, 86, 11], 2263 | "RGB": [166, 27, 41], 2264 | "hex": "#a61b29", 2265 | "name": "苋菜红", 2266 | "pinyin": "xiancaihong", 2267 | "lightSuitable": true, 2268 | "darkSuitable": false 2269 | }, 2270 | { 2271 | "CMYK": [29, 73, 51, 28], 2272 | "RGB": [137, 78, 84], 2273 | "hex": "#894e54", 2274 | "name": "烟红", 2275 | "pinyin": "yanhong", 2276 | "lightSuitable": true, 2277 | "darkSuitable": false 2278 | }, 2279 | { 2280 | "CMYK": [27, 98, 79, 30], 2281 | "RGB": [130, 32, 43], 2282 | "hex": "#82202b", 2283 | "name": "暗紫苑红", 2284 | "pinyin": "anziyuanhong", 2285 | "lightSuitable": true, 2286 | "darkSuitable": false 2287 | }, 2288 | { 2289 | "CMYK": [27, 100, 90, 29], 2290 | "RGB": [130, 17, 31], 2291 | "hex": "#82111f", 2292 | "name": "殷红", 2293 | "pinyin": "yanhong", 2294 | "lightSuitable": true, 2295 | "darkSuitable": false 2296 | }, 2297 | { 2298 | "CMYK": [36, 95, 71, 59], 2299 | "RGB": [84, 30, 36], 2300 | "hex": "#541e24", 2301 | "name": "猪肝紫", 2302 | "pinyin": "zhuganzi", 2303 | "lightSuitable": true, 2304 | "darkSuitable": false 2305 | }, 2306 | { 2307 | "CMYK": [38, 100, 81, 61], 2308 | "RGB": [80, 10, 22], 2309 | "hex": "#500a16", 2310 | "name": "金鱼紫", 2311 | "pinyin": "jinyuzi", 2312 | "lightSuitable": true, 2313 | "darkSuitable": false 2314 | }, 2315 | { 2316 | "CMYK": [1, 11, 9, 0], 2317 | "RGB": [248, 235, 230], 2318 | "hex": "#f8ebe6", 2319 | "name": "草珠红", 2320 | "pinyin": "caozhuhong", 2321 | "lightSuitable": false, 2322 | "darkSuitable": true 2323 | }, 2324 | { 2325 | "CMYK": [0, 68, 21, 0], 2326 | "RGB": [236, 118, 150], 2327 | "hex": "#ec7696", 2328 | "name": "淡绛红", 2329 | "pinyin": "danjianghong", 2330 | "lightSuitable": false, 2331 | "darkSuitable": true 2332 | }, 2333 | { 2334 | "CMYK": [0, 86, 30, 0], 2335 | "RGB": [239, 52, 115], 2336 | "hex": "#ef3473", 2337 | "name": "品红", 2338 | "pinyin": "pinhong", 2339 | "lightSuitable": true, 2340 | "darkSuitable": true 2341 | }, 2342 | { 2343 | "CMYK": [0, 69, 22, 0], 2344 | "RGB": [234, 114, 147], 2345 | "hex": "#ea7293", 2346 | "name": "凤仙花红", 2347 | "pinyin": "fengxianhuahong", 2348 | "lightSuitable": false, 2349 | "darkSuitable": true 2350 | }, 2351 | { 2352 | "CMYK": [0, 52, 18, 0], 2353 | "RGB": [236, 155, 173], 2354 | "hex": "#ec9bad", 2355 | "name": "粉团花红", 2356 | "pinyin": "fentuanhuahong", 2357 | "lightSuitable": false, 2358 | "darkSuitable": true 2359 | }, 2360 | { 2361 | "CMYK": [0, 80, 28, 0], 2362 | "RGB": [235, 80, 126], 2363 | "hex": "#eb507e", 2364 | "name": "夹竹桃红", 2365 | "pinyin": "jiazhutaohong", 2366 | "lightSuitable": false, 2367 | "darkSuitable": true 2368 | }, 2369 | { 2370 | "CMYK": [0, 88, 36, 0], 2371 | "RGB": [237, 47, 106], 2372 | "hex": "#ed2f6a", 2373 | "name": "榲桲红", 2374 | "pinyin": "wenpohong", 2375 | "lightSuitable": true, 2376 | "darkSuitable": true 2377 | }, 2378 | { 2379 | "CMYK": [0, 39, 14, 0], 2380 | "RGB": [238, 184, 195], 2381 | "hex": "#eeb8c3", 2382 | "name": "姜红", 2383 | "pinyin": "jianghong", 2384 | "lightSuitable": false, 2385 | "darkSuitable": true 2386 | }, 2387 | { 2388 | "CMYK": [0, 80, 27, 0], 2389 | "RGB": [234, 81, 127], 2390 | "hex": "#ea517f", 2391 | "name": "莲瓣红", 2392 | "pinyin": "lianbanhong", 2393 | "lightSuitable": false, 2394 | "darkSuitable": true 2395 | }, 2396 | { 2397 | "CMYK": [0, 33, 11, 0], 2398 | "RGB": [241, 196, 205], 2399 | "hex": "#f1c4cd", 2400 | "name": "水红", 2401 | "pinyin": "shuihong", 2402 | "lightSuitable": false, 2403 | "darkSuitable": true 2404 | }, 2405 | { 2406 | "CMYK": [0, 60, 18, 0], 2407 | "RGB": [236, 138, 164], 2408 | "hex": "#ec8aa4", 2409 | "name": "报春红", 2410 | "pinyin": "baochunhong", 2411 | "lightSuitable": false, 2412 | "darkSuitable": true 2413 | }, 2414 | { 2415 | "CMYK": [8, 78, 35, 1], 2416 | "RGB": [206, 87, 109], 2417 | "hex": "#ce5777", 2418 | "name": "月季红", 2419 | "pinyin": "yuejihong", 2420 | "lightSuitable": true, 2421 | "darkSuitable": true 2422 | }, 2423 | { 2424 | "CMYK": [0, 52, 15, 0], 2425 | "RGB": [237, 157, 178], 2426 | "hex": "#ed9db2", 2427 | "name": "豇豆红", 2428 | "pinyin": "jiangdouhong", 2429 | "lightSuitable": false, 2430 | "darkSuitable": true 2431 | }, 2432 | { 2433 | "CMYK": [0, 63, 18, 0], 2434 | "RGB": [239, 130, 160], 2435 | "hex": "#ef82a0", 2436 | "name": "霞光红", 2437 | "pinyin": "xiaguanghong", 2438 | "lightSuitable": false, 2439 | "darkSuitable": true 2440 | }, 2441 | { 2442 | "CMYK": [0, 85, 33, 0], 2443 | "RGB": [235, 60, 112], 2444 | "hex": "#eb3c70", 2445 | "name": "松叶牡丹红", 2446 | "pinyin": "songyemudanhong", 2447 | "lightSuitable": true, 2448 | "darkSuitable": true 2449 | }, 2450 | { 2451 | "CMYK": [0, 88, 40, 0], 2452 | "RGB": [236, 44, 100], 2453 | "hex": "#ec2c64", 2454 | "name": "喜蛋红", 2455 | "pinyin": "xidanhong", 2456 | "lightSuitable": true, 2457 | "darkSuitable": true 2458 | }, 2459 | { 2460 | "CMYK": [5, 38, 20, 0], 2461 | "RGB": [227, 180, 184], 2462 | "hex": "#e3b4b8", 2463 | "name": "鼠鼻红", 2464 | "pinyin": "shubihong", 2465 | "lightSuitable": false, 2466 | "darkSuitable": true 2467 | }, 2468 | { 2469 | "CMYK": [5, 96, 73, 1], 2470 | "RGB": [204, 22, 58], 2471 | "hex": "#cc163a", 2472 | "name": "尖晶玉红", 2473 | "pinyin": "jianjingyuhong", 2474 | "lightSuitable": true, 2475 | "darkSuitable": false 2476 | }, 2477 | { 2478 | "CMYK": [16, 61, 34, 4], 2479 | "RGB": [194, 124, 136], 2480 | "hex": "#c27c88", 2481 | "name": "山黎豆红", 2482 | "pinyin": "shanlidouhong", 2483 | "lightSuitable": false, 2484 | "darkSuitable": true 2485 | }, 2486 | { 2487 | "CMYK": [13, 90, 56, 3], 2488 | "RGB": [191, 53, 83], 2489 | "hex": "#bf3553", 2490 | "name": "锦葵红", 2491 | "pinyin": "jinkuihong", 2492 | "lightSuitable": true, 2493 | "darkSuitable": false 2494 | }, 2495 | { 2496 | "CMYK": [41, 64, 44, 36], 2497 | "RGB": [115, 87, 92], 2498 | "hex": "#73575c", 2499 | "name": "鼠背灰", 2500 | "pinyin": "shubeihui", 2501 | "lightSuitable": true, 2502 | "darkSuitable": false 2503 | }, 2504 | { 2505 | "CMYK": [33, 100, 75, 49], 2506 | "RGB": [98, 22, 36], 2507 | "hex": "#621624", 2508 | "name": "甘蔗紫", 2509 | "pinyin": "ganzhezi", 2510 | "lightSuitable": true, 2511 | "darkSuitable": false 2512 | }, 2513 | { 2514 | "CMYK": [32, 100, 84, 49], 2515 | "RGB": [99, 7, 28], 2516 | "hex": "#63071c", 2517 | "name": "石竹紫", 2518 | "pinyin": "shizhuzi", 2519 | "lightSuitable": true, 2520 | "darkSuitable": false 2521 | }, 2522 | { 2523 | "CMYK": [57, 72, 54, 74], 2524 | "RGB": [54, 40, 43], 2525 | "hex": "#36282b", 2526 | "name": "苍蝇灰", 2527 | "pinyin": "cangyinghui", 2528 | "lightSuitable": true, 2529 | "darkSuitable": false 2530 | }, 2531 | { 2532 | "CMYK": [52, 88, 58, 81], 2533 | "RGB": [48, 22, 28], 2534 | "hex": "#30161c", 2535 | "name": "卵石紫", 2536 | "pinyin": "luanshizi", 2537 | "lightSuitable": true, 2538 | "darkSuitable": false 2539 | }, 2540 | { 2541 | "CMYK": [56, 88, 62, 84], 2542 | "RGB": [43, 18, 22], 2543 | "hex": "#2b1216", 2544 | "name": "李紫", 2545 | "pinyin": "lizi", 2546 | "lightSuitable": true, 2547 | "darkSuitable": false 2548 | }, 2549 | { 2550 | "CMYK": [58, 90, 63, 83], 2551 | "RGB": [45, 12, 19], 2552 | "hex": "#2d0c13", 2553 | "name": "茄皮紫", 2554 | "pinyin": "qiepizi", 2555 | "lightSuitable": true, 2556 | "darkSuitable": false 2557 | }, 2558 | { 2559 | "CMYK": [0, 76, 16, 0], 2560 | "RGB": [206, 94, 138], 2561 | "hex": "#ce5e8a", 2562 | "name": "吊钟花红", 2563 | "pinyin": "diaozhonghuahong", 2564 | "lightSuitable": true, 2565 | "darkSuitable": true 2566 | }, 2567 | { 2568 | "CMYK": [0, 81, 18, 0], 2569 | "RGB": [236, 78, 138], 2570 | "hex": "#ec4e8a", 2571 | "name": "兔眼红", 2572 | "pinyin": "tuyanhong", 2573 | "lightSuitable": false, 2574 | "darkSuitable": true 2575 | }, 2576 | { 2577 | "CMYK": [0, 87, 24, 0], 2578 | "RGB": [238, 44, 121], 2579 | "hex": "#ee2c79", 2580 | "name": "紫荆红", 2581 | "pinyin": "zijinghong", 2582 | "lightSuitable": true, 2583 | "darkSuitable": true 2584 | }, 2585 | { 2586 | "CMYK": [24, 99, 52, 19], 2587 | "RGB": [149, 28, 72], 2588 | "hex": "#951c48", 2589 | "name": "菜头紫", 2590 | "pinyin": "caitouzi", 2591 | "lightSuitable": true, 2592 | "darkSuitable": false 2593 | }, 2594 | { 2595 | "CMYK": [34, 97, 54, 50], 2596 | "RGB": [98, 29, 52], 2597 | "hex": "#621d34", 2598 | "name": "鹞冠紫", 2599 | "pinyin": "yaoguanzi", 2600 | "lightSuitable": true, 2601 | "darkSuitable": false 2602 | }, 2603 | { 2604 | "CMYK": [33, 100, 58, 60], 2605 | "RGB": [98, 16, 46], 2606 | "hex": "#62102e", 2607 | "name": "葡萄酒红", 2608 | "pinyin": "putaojiuhong", 2609 | "lightSuitable": true, 2610 | "darkSuitable": false 2611 | }, 2612 | { 2613 | "CMYK": [53, 81, 50, 74], 2614 | "RGB": [56, 33, 41], 2615 | "hex": "#382129", 2616 | "name": "磨石紫", 2617 | "pinyin": "moshizi", 2618 | "lightSuitable": true, 2619 | "darkSuitable": false 2620 | }, 2621 | { 2622 | "CMYK": [48, 90, 50, 76], 2623 | "RGB": [56, 25, 36], 2624 | "hex": "#381924", 2625 | "name": "檀紫", 2626 | "pinyin": "tanzi", 2627 | "lightSuitable": true, 2628 | "darkSuitable": false 2629 | }, 2630 | { 2631 | "CMYK": [50, 91, 54, 79], 2632 | "RGB": [51, 20, 30], 2633 | "hex": "#33141e", 2634 | "name": "火鹅紫", 2635 | "pinyin": "huoezi", 2636 | "lightSuitable": true, 2637 | "darkSuitable": false 2638 | }, 2639 | { 2640 | "CMYK": [53, 92, 55, 81], 2641 | "RGB": [49, 15, 27], 2642 | "hex": "#310f1b", 2643 | "name": "墨紫", 2644 | "pinyin": "mozi", 2645 | "lightSuitable": true, 2646 | "darkSuitable": false 2647 | }, 2648 | { 2649 | "CMYK": [0, 48, 15, 0], 2650 | "RGB": [238, 166, 183], 2651 | "hex": "#eea6b7", 2652 | "name": "晶红", 2653 | "pinyin": "jinghong", 2654 | "lightSuitable": false, 2655 | "darkSuitable": true 2656 | }, 2657 | { 2658 | "CMYK": [0, 82, 16, 0], 2659 | "RGB": [239, 73, 139], 2660 | "hex": "#ef498b", 2661 | "name": "扁豆花红", 2662 | "pinyin": "biandouhuahong", 2663 | "lightSuitable": false, 2664 | "darkSuitable": true 2665 | }, 2666 | { 2667 | "CMYK": [2, 66, 22, 0], 2668 | "RGB": [222, 120, 151], 2669 | "hex": "#de7897", 2670 | "name": "白芨红", 2671 | "pinyin": "baijihong", 2672 | "lightSuitable": false, 2673 | "darkSuitable": true 2674 | }, 2675 | { 2676 | "CMYK": [0, 85, 24, 0], 2677 | "RGB": [222, 63, 124], 2678 | "hex": "#de3f7c", 2679 | "name": "嫩菱红", 2680 | "pinyin": "nenlinghong", 2681 | "lightSuitable": true, 2682 | "darkSuitable": true 2683 | }, 2684 | { 2685 | "CMYK": [5, 87, 30, 1], 2686 | "RGB": [209, 60, 116], 2687 | "hex": "#d13c74", 2688 | "name": "菠根红", 2689 | "pinyin": "bogenhong", 2690 | "lightSuitable": true, 2691 | "darkSuitable": false 2692 | }, 2693 | { 2694 | "CMYK": [15, 68, 28, 2], 2695 | "RGB": [197, 112, 139], 2696 | "hex": "#c5708b", 2697 | "name": "酢酱草红", 2698 | "pinyin": "cujiangcaohong", 2699 | "lightSuitable": false, 2700 | "darkSuitable": true 2701 | }, 2702 | { 2703 | "CMYK": [22, 83, 34, 11], 2704 | "RGB": [168, 69, 107], 2705 | "hex": "#a8456b", 2706 | "name": "洋葱紫", 2707 | "pinyin": "yangcongzi", 2708 | "lightSuitable": true, 2709 | "darkSuitable": false 2710 | }, 2711 | { 2712 | "CMYK": [40, 92, 47, 64], 2713 | "RGB": [75, 30, 47], 2714 | "hex": "#4b1e2f", 2715 | "name": "海象紫", 2716 | "pinyin": "haixiangzi", 2717 | "lightSuitable": true, 2718 | "darkSuitable": false 2719 | }, 2720 | { 2721 | "CMYK": [41, 97, 49, 68], 2722 | "RGB": [70, 22, 41], 2723 | "hex": "#461629", 2724 | "name": "绀紫", 2725 | "pinyin": "ganzi", 2726 | "lightSuitable": true, 2727 | "darkSuitable": false 2728 | }, 2729 | { 2730 | "CMYK": [42, 99, 51, 69], 2731 | "RGB": [68, 14, 37], 2732 | "hex": "#440e25", 2733 | "name": "古铜紫", 2734 | "pinyin": "gutongzi", 2735 | "lightSuitable": true, 2736 | "darkSuitable": false 2737 | }, 2738 | { 2739 | "CMYK": [0, 30, 12, 0], 2740 | "RGB": [240, 201, 207], 2741 | "hex": "#f0c9cf", 2742 | "name": "石蕊红", 2743 | "pinyin": "shiruihong", 2744 | "lightSuitable": false, 2745 | "darkSuitable": true 2746 | }, 2747 | { 2748 | "CMYK": [0, 50, 16, 0], 2749 | "RGB": [235, 160, 179], 2750 | "hex": "#eba0b3", 2751 | "name": "芍药耕红", 2752 | "pinyin": "shaoyaogenghong", 2753 | "lightSuitable": false, 2754 | "darkSuitable": true 2755 | }, 2756 | { 2757 | "CMYK": [0, 88, 23, 0], 2758 | "RGB": [236, 45, 122], 2759 | "hex": "#ec2d7a", 2760 | "name": "藏花红", 2761 | "pinyin": "canghuahong", 2762 | "lightSuitable": true, 2763 | "darkSuitable": true 2764 | }, 2765 | { 2766 | "CMYK": [0, 71, 18, 0], 2767 | "RGB": [225, 108, 150], 2768 | "hex": "#e16c96", 2769 | "name": "初荷红", 2770 | "pinyin": "chuhehong", 2771 | "lightSuitable": false, 2772 | "darkSuitable": true 2773 | }, 2774 | { 2775 | "CMYK": [6, 13, 7, 0], 2776 | "RGB": [237, 227, 231], 2777 | "hex": "#ede3e7", 2778 | "name": "马鞭草紫", 2779 | "pinyin": "mabiancaozi", 2780 | "lightSuitable": false, 2781 | "darkSuitable": true 2782 | }, 2783 | { 2784 | "CMYK": [7, 20, 8, 0], 2785 | "RGB": [233, 215, 223], 2786 | "hex": "#e9d7df", 2787 | "name": "丁香淡紫", 2788 | "pinyin": "dingxiangdanzi", 2789 | "lightSuitable": false, 2790 | "darkSuitable": true 2791 | }, 2792 | { 2793 | "CMYK": [7, 79, 18, 0], 2794 | "RGB": [210, 86, 140], 2795 | "hex": "#d2568c", 2796 | "name": "丹紫红", 2797 | "pinyin": "danzihong", 2798 | "lightSuitable": true, 2799 | "darkSuitable": true 2800 | }, 2801 | { 2802 | "CMYK": [4, 89, 21, 0], 2803 | "RGB": [210, 53, 125], 2804 | "hex": "#d2357d", 2805 | "name": "玫瑰红", 2806 | "pinyin": "meiguihong", 2807 | "lightSuitable": true, 2808 | "darkSuitable": false 2809 | }, 2810 | { 2811 | "CMYK": [19, 27, 9, 0], 2812 | "RGB": [209, 194, 211], 2813 | "hex": "#d1c2d3", 2814 | "name": "淡牵牛紫", 2815 | "pinyin": "danqianniuzi", 2816 | "lightSuitable": false, 2817 | "darkSuitable": true 2818 | }, 2819 | { 2820 | "CMYK": [21, 37, 12, 0], 2821 | "RGB": [200, 173, 196], 2822 | "hex": "#c8adc4", 2823 | "name": "凤信紫", 2824 | "pinyin": "fengxinzi", 2825 | "lightSuitable": false, 2826 | "darkSuitable": true 2827 | }, 2828 | { 2829 | "CMYK": [23, 53, 14, 1], 2830 | "RGB": [192, 142, 175], 2831 | "hex": "#c08eaf", 2832 | "name": "萝兰紫", 2833 | "pinyin": "luolanzi", 2834 | "lightSuitable": false, 2835 | "darkSuitable": true 2836 | }, 2837 | { 2838 | "CMYK": [18, 91, 18, 2], 2839 | "RGB": [186, 47, 123], 2840 | "hex": "#ba2f7b", 2841 | "name": "玫瑰紫", 2842 | "pinyin": "meiguizi", 2843 | "lightSuitable": true, 2844 | "darkSuitable": false 2845 | }, 2846 | { 2847 | "CMYK": [58, 56, 17, 2], 2848 | "RGB": [128, 118, 163], 2849 | "hex": "#8076a3", 2850 | "name": "藤萝紫", 2851 | "pinyin": "tengluozi", 2852 | "lightSuitable": true, 2853 | "darkSuitable": true 2854 | }, 2855 | { 2856 | "CMYK": [57, 62, 16, 2], 2857 | "RGB": [128, 109, 158], 2858 | "hex": "#806d9e", 2859 | "name": "槿紫", 2860 | "pinyin": "jinzi", 2861 | "lightSuitable": true, 2862 | "darkSuitable": false 2863 | }, 2864 | { 2865 | "CMYK": [56, 72, 15, 1], 2866 | "RGB": [129, 92, 148], 2867 | "hex": "#815c94", 2868 | "name": "蕈紫", 2869 | "pinyin": "xunzi", 2870 | "lightSuitable": true, 2871 | "darkSuitable": false 2872 | }, 2873 | { 2874 | "CMYK": [54, 89, 12, 1], 2875 | "RGB": [129, 60, 133], 2876 | "hex": "#813c85", 2877 | "name": "桔梗紫", 2878 | "pinyin": "jiegengzi", 2879 | "lightSuitable": true, 2880 | "darkSuitable": false 2881 | }, 2882 | { 2883 | "CMYK": [52, 100, 17, 7], 2884 | "RGB": [126, 22, 113], 2885 | "hex": "#7e1671", 2886 | "name": "魏紫", 2887 | "pinyin": "weizi", 2888 | "lightSuitable": true, 2889 | "darkSuitable": false 2890 | }, 2891 | { 2892 | "CMYK": [3, 26, 10, 0], 2893 | "RGB": [233, 204, 211], 2894 | "hex": "#e9ccd3", 2895 | "name": "芝兰紫", 2896 | "pinyin": "zhilanzi", 2897 | "lightSuitable": false, 2898 | "darkSuitable": true 2899 | }, 2900 | { 2901 | "CMYK": [10, 67, 12, 0], 2902 | "RGB": [210, 118, 163], 2903 | "hex": "#d276a3", 2904 | "name": "菱锰红", 2905 | "pinyin": "lingmenghong", 2906 | "lightSuitable": false, 2907 | "darkSuitable": true 2908 | }, 2909 | { 2910 | "CMYK": [11, 97, 10, 0], 2911 | "RGB": [204, 85, 149], 2912 | "hex": "#cc5595", 2913 | "name": "龙须红", 2914 | "pinyin": "longxuhong", 2915 | "lightSuitable": true, 2916 | "darkSuitable": true 2917 | }, 2918 | { 2919 | "CMYK": [8, 22, 12, 0], 2920 | "RGB": [230, 210, 213], 2921 | "hex": "#e6d2d5", 2922 | "name": "蓟粉红", 2923 | "pinyin": "jifenhong", 2924 | "lightSuitable": false, 2925 | "darkSuitable": true 2926 | }, 2927 | { 2928 | "CMYK": [16, 79, 14, 1], 2929 | "RGB": [195, 86, 145], 2930 | "hex": "#c35691", 2931 | "name": "电气石红", 2932 | "pinyin": "dianqishihong", 2933 | "lightSuitable": true, 2934 | "darkSuitable": true 2935 | }, 2936 | { 2937 | "CMYK": [19, 68, 18, 1], 2938 | "RGB": [192, 111, 152], 2939 | "hex": "#c06f98", 2940 | "name": "樱草紫", 2941 | "pinyin": "yingcaozi", 2942 | "lightSuitable": false, 2943 | "darkSuitable": true 2944 | }, 2945 | { 2946 | "CMYK": [25, 31, 26, 5], 2947 | "RGB": [189, 174, 173], 2948 | "hex": "#bdaead", 2949 | "name": "芦穗灰", 2950 | "pinyin": "lusuihui", 2951 | "lightSuitable": false, 2952 | "darkSuitable": true 2953 | }, 2954 | { 2955 | "CMYK": [26, 43, 26, 6], 2956 | "RGB": [181, 152, 161], 2957 | "hex": "#b598a1", 2958 | "name": "隐红灰", 2959 | "pinyin": "yinhonghui", 2960 | "lightSuitable": false, 2961 | "darkSuitable": true 2962 | }, 2963 | { 2964 | "CMYK": [27, 97, 27, 14], 2965 | "RGB": [155, 30, 100], 2966 | "hex": "#9b1e64", 2967 | "name": "苋菜紫", 2968 | "pinyin": "xiancaizi", 2969 | "lightSuitable": true, 2970 | "darkSuitable": false 2971 | }, 2972 | { 2973 | "CMYK": [39, 53, 38, 25], 2974 | "RGB": [133, 109, 114], 2975 | "hex": "#856d72", 2976 | "name": "芦灰", 2977 | "pinyin": "luhui", 2978 | "lightSuitable": true, 2979 | "darkSuitable": false 2980 | }, 2981 | { 2982 | "CMYK": [49, 71, 49, 58], 2983 | "RGB": [79, 56, 62], 2984 | "hex": "#4f383e", 2985 | "name": "暮云灰", 2986 | "pinyin": "muyunhui", 2987 | "lightSuitable": true, 2988 | "darkSuitable": false 2989 | }, 2990 | { 2991 | "CMYK": [49, 82, 46, 63], 2992 | "RGB": [72, 41, 54], 2993 | "hex": "#482936", 2994 | "name": "斑鸠灰", 2995 | "pinyin": "banjiuhui", 2996 | "lightSuitable": true, 2997 | "darkSuitable": false 2998 | }, 2999 | { 3000 | "CMYK": [4, 11, 9, 0], 3001 | "RGB": [242, 231, 229], 3002 | "hex": "#f2e7e5", 3003 | "name": "淡藤萝紫", 3004 | "pinyin": "dantengluozi", 3005 | "lightSuitable": false, 3006 | "darkSuitable": true 3007 | }, 3008 | { 3009 | "CMYK": [10, 27, 11, 0], 3010 | "RGB": [224, 200, 209], 3011 | "hex": "#e0c8d1", 3012 | "name": "淡青紫", 3013 | "pinyin": "danqingzi", 3014 | "lightSuitable": false, 3015 | "darkSuitable": true 3016 | }, 3017 | { 3018 | "CMYK": [24, 58, 15, 1], 3019 | "RGB": [188, 132, 168], 3020 | "hex": "#bc84a8", 3021 | "name": "青蛤壳紫", 3022 | "pinyin": "qinghakezi", 3023 | "lightSuitable": false, 3024 | "darkSuitable": true 3025 | }, 3026 | { 3027 | "CMYK": [31, 71, 15, 1], 3028 | "RGB": [173, 101, 152], 3029 | "hex": "#ad6598", 3030 | "name": "豆蔻紫", 3031 | "pinyin": "doukouzi", 3032 | "lightSuitable": true, 3033 | "darkSuitable": true 3034 | }, 3035 | { 3036 | "CMYK": [35, 75, 18, 2], 3037 | "RGB": [163, 92, 143], 3038 | "hex": "#a35c8f", 3039 | "name": "扁豆紫", 3040 | "pinyin": "biandouzi", 3041 | "lightSuitable": true, 3042 | "darkSuitable": false 3043 | }, 3044 | { 3045 | "CMYK": [39, 91, 15, 3], 3046 | "RGB": [152, 54, 128], 3047 | "hex": "#983680", 3048 | "name": "芥花紫", 3049 | "pinyin": "jiehuazi", 3050 | "lightSuitable": true, 3051 | "darkSuitable": false 3052 | }, 3053 | { 3054 | "CMYK": [43, 97, 19, 8], 3055 | "RGB": [139, 38, 113], 3056 | "hex": "#8b2671", 3057 | "name": "青莲", 3058 | "pinyin": "qinglian", 3059 | "lightSuitable": true, 3060 | "darkSuitable": false 3061 | }, 3062 | { 3063 | "CMYK": [44, 85, 24, 10], 3064 | "RGB": [137, 66, 118], 3065 | "hex": "#894276", 3066 | "name": "芓紫", 3067 | "pinyin": "zizi", 3068 | "lightSuitable": true, 3069 | "darkSuitable": false 3070 | }, 3071 | { 3072 | "CMYK": [45, 99, 24, 16], 3073 | "RGB": [126, 32, 101], 3074 | "hex": "#7e2065", 3075 | "name": "葛巾紫", 3076 | "pinyin": "gejinzi", 3077 | "lightSuitable": true, 3078 | "darkSuitable": false 3079 | }, 3080 | { 3081 | "CMYK": [49, 100, 29, 32], 3082 | "RGB": [104, 23, 82], 3083 | "hex": "#681752", 3084 | "name": "牵牛紫", 3085 | "pinyin": "qianniuzi", 3086 | "lightSuitable": true, 3087 | "darkSuitable": false 3088 | }, 3089 | { 3090 | "CMYK": [53, 75, 41, 41], 3091 | "RGB": [93, 63, 81], 3092 | "hex": "#5d3f51", 3093 | "name": "紫灰", 3094 | "pinyin": "zihui", 3095 | "lightSuitable": true, 3096 | "darkSuitable": false 3097 | }, 3098 | { 3099 | "CMYK": [55, 87, 41, 52], 3100 | "RGB": [78, 42, 64], 3101 | "hex": "#4e2a40", 3102 | "name": "龙睛鱼紫", 3103 | "pinyin": "longjingyuzi", 3104 | "lightSuitable": true, 3105 | "darkSuitable": false 3106 | }, 3107 | { 3108 | "CMYK": [58, 96, 40, 61], 3109 | "RGB": [65, 28, 53], 3110 | "hex": "#411c35", 3111 | "name": "荸荠紫", 3112 | "pinyin": "biqizi", 3113 | "lightSuitable": true, 3114 | "darkSuitable": false 3115 | }, 3116 | { 3117 | "CMYK": [63, 74, 52, 70], 3118 | "RGB": [54, 41, 47], 3119 | "hex": "#36292f", 3120 | "name": "古鼎灰", 3121 | "pinyin": "gudinghui", 3122 | "lightSuitable": true, 3123 | "darkSuitable": false 3124 | }, 3125 | { 3126 | "CMYK": [81, 87, 54, 84], 3127 | "RGB": [30, 19, 29], 3128 | "hex": "#1e131d", 3129 | "name": "乌梅紫", 3130 | "pinyin": "wumeizi", 3131 | "lightSuitable": true, 3132 | "darkSuitable": false 3133 | }, 3134 | { 3135 | "CMYK": [83, 87, 55, 86], 3136 | "RGB": [28, 13, 26], 3137 | "hex": "#1c0d1a", 3138 | "name": "深牵牛紫", 3139 | "pinyin": "shenqianniuzi", 3140 | "lightSuitable": true, 3141 | "darkSuitable": false 3142 | }, 3143 | { 3144 | "CMYK": [7, 5, 7, 0], 3145 | "RGB": [241, 240, 237], 3146 | "hex": "#f1f0ed", 3147 | "name": "银白", 3148 | "pinyin": "yinbai", 3149 | "lightSuitable": false, 3150 | "darkSuitable": true 3151 | }, 3152 | { 3153 | "CMYK": [13, 10, 9, 0], 3154 | "RGB": [226, 225, 228], 3155 | "hex": "#e2e1e4", 3156 | "name": "芡食白", 3157 | "pinyin": "qianshibai", 3158 | "lightSuitable": false, 3159 | "darkSuitable": true 3160 | }, 3161 | { 3162 | "CMYK": [23, 18, 12, 1], 3163 | "RGB": [204, 204, 214], 3164 | "hex": "#ccccd6", 3165 | "name": "远山紫", 3166 | "pinyin": "yuanshanzi", 3167 | "lightSuitable": false, 3168 | "darkSuitable": true 3169 | }, 3170 | { 3171 | "CMYK": [39, 31, 17, 2], 3172 | "RGB": [167, 168, 189], 3173 | "hex": "#a7a8bd", 3174 | "name": "淡蓝紫", 3175 | "pinyin": "danlanzi", 3176 | "lightSuitable": false, 3177 | "darkSuitable": true 3178 | }, 3179 | { 3180 | "CMYK": [74, 64, 14, 1], 3181 | "RGB": [97, 100, 159], 3182 | "hex": "#61649f", 3183 | "name": "山梗紫", 3184 | "pinyin": "shangengzi", 3185 | "lightSuitable": true, 3186 | "darkSuitable": false 3187 | }, 3188 | { 3189 | "CMYK": [63, 53, 22, 5], 3190 | "RGB": [116, 117, 155], 3191 | "hex": "#74759b", 3192 | "name": "螺甸紫", 3193 | "pinyin": "luodianzi", 3194 | "lightSuitable": true, 3195 | "darkSuitable": false 3196 | }, 3197 | { 3198 | "CMYK": [21, 17, 19, 1], 3199 | "RGB": [207, 204, 201], 3200 | "hex": "#cfccc9", 3201 | "name": "玛瑙灰", 3202 | "pinyin": "manaohui", 3203 | "lightSuitable": false, 3204 | "darkSuitable": true 3205 | }, 3206 | { 3207 | "CMYK": [80, 73, 21, 6], 3208 | "RGB": [82, 82, 136], 3209 | "hex": "#525288", 3210 | "name": "野菊紫", 3211 | "pinyin": "yejuzi", 3212 | "lightSuitable": true, 3213 | "darkSuitable": false 3214 | }, 3215 | { 3216 | "CMYK": [100, 93, 21, 5], 3217 | "RGB": [46, 49, 124], 3218 | "hex": "#2e317c", 3219 | "name": "满天星紫", 3220 | "pinyin": "mantianxingzi", 3221 | "lightSuitable": true, 3222 | "darkSuitable": false 3223 | }, 3224 | { 3225 | "CMYK": [48, 45, 40, 26], 3226 | "RGB": [122, 115, 116], 3227 | "hex": "#7a7374", 3228 | "name": "锌灰", 3229 | "pinyin": "xinhui", 3230 | "lightSuitable": true, 3231 | "darkSuitable": false 3232 | }, 3233 | { 3234 | "CMYK": [91, 84, 40, 43], 3235 | "RGB": [48, 47, 75], 3236 | "hex": "#302f4b", 3237 | "name": "野葡萄紫", 3238 | "pinyin": "yeputaozi", 3239 | "lightSuitable": true, 3240 | "darkSuitable": false 3241 | }, 3242 | { 3243 | "CMYK": [70, 69, 49, 56], 3244 | "RGB": [62, 56, 65], 3245 | "hex": "#3e3841", 3246 | "name": "剑锋紫", 3247 | "pinyin": "jianfengzi", 3248 | "lightSuitable": true, 3249 | "darkSuitable": false 3250 | }, 3251 | { 3252 | "CMYK": [79, 74, 49, 60], 3253 | "RGB": [50, 47, 59], 3254 | "hex": "#322f3b", 3255 | "name": "龙葵紫", 3256 | "pinyin": "longkuizi", 3257 | "lightSuitable": true, 3258 | "darkSuitable": false 3259 | }, 3260 | { 3261 | "CMYK": [90, 84, 50, 69], 3262 | "RGB": [34, 32, 46], 3263 | "hex": "#22202e", 3264 | "name": "暗龙胆紫", 3265 | "pinyin": "anlongdanzi", 3266 | "lightSuitable": true, 3267 | "darkSuitable": false 3268 | }, 3269 | { 3270 | "CMYK": [98, 93, 48, 73], 3271 | "RGB": [31, 32, 64], 3272 | "hex": "#1f2040", 3273 | "name": "晶石紫", 3274 | "pinyin": "jingshizi", 3275 | "lightSuitable": true, 3276 | "darkSuitable": false 3277 | }, 3278 | { 3279 | "CMYK": [100, 94, 52, 77], 3280 | "RGB": [19, 17, 36], 3281 | "hex": "#131124", 3282 | "name": "暗蓝紫", 3283 | "pinyin": "anlanzi", 3284 | "lightSuitable": true, 3285 | "darkSuitable": false 3286 | }, 3287 | { 3288 | "CMYK": [95, 46, 10, 1], 3289 | "RGB": [39, 117, 182], 3290 | "hex": "#2775b6", 3291 | "name": "景泰蓝", 3292 | "pinyin": "jingtailan", 3293 | "lightSuitable": true, 3294 | "darkSuitable": false 3295 | }, 3296 | { 3297 | "CMYK": [96, 47, 11, 1], 3298 | "RGB": [36, 116, 181], 3299 | "hex": "#2474b5", 3300 | "name": "尼罗蓝", 3301 | "pinyin": "niluolan", 3302 | "lightSuitable": true, 3303 | "darkSuitable": false 3304 | }, 3305 | { 3306 | "CMYK": [25, 6, 10, 0], 3307 | "RGB": [208, 223, 230], 3308 | "hex": "#d0dfe6", 3309 | "name": "远天蓝", 3310 | "pinyin": "yuantianlan", 3311 | "lightSuitable": false, 3312 | "darkSuitable": true 3313 | }, 3314 | { 3315 | "CMYK": [53, 19, 15, 1], 3316 | "RGB": [147, 181, 207], 3317 | "hex": "#93b5cf", 3318 | "name": "星蓝", 3319 | "pinyin": "xinglan", 3320 | "lightSuitable": false, 3321 | "darkSuitable": true 3322 | }, 3323 | { 3324 | "CMYK": [74, 27, 16, 2], 3325 | "RGB": [97, 154, 195], 3326 | "hex": "#619ac3", 3327 | "name": "羽扇豆蓝", 3328 | "pinyin": "yushandoulan", 3329 | "lightSuitable": false, 3330 | "darkSuitable": true 3331 | }, 3332 | { 3333 | "CMYK": [95, 45, 10, 1], 3334 | "RGB": [35, 118, 183], 3335 | "hex": "#2376b7", 3336 | "name": "花青", 3337 | "pinyin": "huaqing", 3338 | "lightSuitable": true, 3339 | "darkSuitable": false 3340 | }, 3341 | { 3342 | "CMYK": [78, 27, 17, 2], 3343 | "RGB": [86, 152, 195], 3344 | "hex": "#5698c3", 3345 | "name": "睛蓝", 3346 | "pinyin": "jinglan", 3347 | "lightSuitable": false, 3348 | "darkSuitable": true 3349 | }, 3350 | { 3351 | "CMYK": [99, 44, 10, 1], 3352 | "RGB": [33, 119, 184], 3353 | "hex": "#2177b8", 3354 | "name": "虹蓝", 3355 | "pinyin": "honglan", 3356 | "lightSuitable": true, 3357 | "darkSuitable": false 3358 | }, 3359 | { 3360 | "CMYK": [43, 4, 16, 0], 3361 | "RGB": [176, 213, 223], 3362 | "hex": "#b0d5df", 3363 | "name": "湖水蓝", 3364 | "pinyin": "hushuilan", 3365 | "lightSuitable": false, 3366 | "darkSuitable": true 3367 | }, 3368 | { 3369 | "CMYK": [59, 12, 19, 0], 3370 | "RGB": [138, 188, 209], 3371 | "hex": "#8abcd1", 3372 | "name": "秋波蓝", 3373 | "pinyin": "qiubolan", 3374 | "lightSuitable": false, 3375 | "darkSuitable": true 3376 | }, 3377 | { 3378 | "CMYK": [73, 17, 20, 1], 3379 | "RGB": [102, 169, 201], 3380 | "hex": "#66a9c9", 3381 | "name": "涧石蓝", 3382 | "pinyin": "jianshilan", 3383 | "lightSuitable": false, 3384 | "darkSuitable": true 3385 | }, 3386 | { 3387 | "CMYK": [93, 36, 15, 2], 3388 | "RGB": [41, 131, 187], 3389 | "hex": "#2983bb", 3390 | "name": "潮蓝", 3391 | "pinyin": "chaolan", 3392 | "lightSuitable": true, 3393 | "darkSuitable": true 3394 | }, 3395 | { 3396 | "CMYK": [99, 48, 11, 1], 3397 | "RGB": [23, 114, 180], 3398 | "hex": "#1772b4", 3399 | "name": "群青", 3400 | "pinyin": "qunqing", 3401 | "lightSuitable": true, 3402 | "darkSuitable": false 3403 | }, 3404 | { 3405 | "CMYK": [74, 2, 24, 0], 3406 | "RGB": [99, 187, 208], 3407 | "hex": "#63bbd0", 3408 | "name": "霁青", 3409 | "pinyin": "jiqing", 3410 | "lightSuitable": false, 3411 | "darkSuitable": true 3412 | }, 3413 | { 3414 | "CMYK": [77, 7, 24, 0], 3415 | "RGB": [92, 179, 204], 3416 | "hex": "#5cb3cc", 3417 | "name": "碧青", 3418 | "pinyin": "biqing", 3419 | "lightSuitable": false, 3420 | "darkSuitable": true 3421 | }, 3422 | { 3423 | "CMYK": [94, 32, 17, 3], 3424 | "RGB": [36, 134, 185], 3425 | "hex": "#2486b9", 3426 | "name": "宝石蓝", 3427 | "pinyin": "baoshilan", 3428 | "lightSuitable": true, 3429 | "darkSuitable": true 3430 | }, 3431 | { 3432 | "CMYK": [98, 43, 14, 2], 3433 | "RGB": [22, 119, 179], 3434 | "hex": "#1677b3", 3435 | "name": "天蓝", 3436 | "pinyin": "tianlan", 3437 | "lightSuitable": true, 3438 | "darkSuitable": false 3439 | }, 3440 | { 3441 | "CMYK": [100, 52, 11, 1], 3442 | "RGB": [18, 107, 174], 3443 | "hex": "#126bae", 3444 | "name": "柏林蓝", 3445 | "pinyin": "bolinlan", 3446 | "lightSuitable": true, 3447 | "darkSuitable": false 3448 | }, 3449 | { 3450 | "CMYK": [92, 10, 25, 1], 3451 | "RGB": [34, 162, 195], 3452 | "hex": "#22a2c3", 3453 | "name": "海青", 3454 | "pinyin": "haiqing", 3455 | "lightSuitable": false, 3456 | "darkSuitable": true 3457 | }, 3458 | { 3459 | "CMYK": [94, 16, 23, 3], 3460 | "RGB": [26, 148, 188], 3461 | "hex": "#1a94bc", 3462 | "name": "钴蓝", 3463 | "pinyin": "gulan", 3464 | "lightSuitable": false, 3465 | "darkSuitable": true 3466 | }, 3467 | { 3468 | "CMYK": [95, 25, 20, 4], 3469 | "RGB": [21, 139, 184], 3470 | "hex": "#158bb8", 3471 | "name": "鸢尾蓝", 3472 | "pinyin": "yuanweilan", 3473 | "lightSuitable": true, 3474 | "darkSuitable": true 3475 | }, 3476 | { 3477 | "CMYK": [98, 42, 16, 3], 3478 | "RGB": [17, 119, 176], 3479 | "hex": "#1177b0", 3480 | "name": "牵牛花蓝", 3481 | "pinyin": "qianniuhualan", 3482 | "lightSuitable": true, 3483 | "darkSuitable": false 3484 | }, 3485 | { 3486 | "CMYK": [100, 65, 11, 1], 3487 | "RGB": [15, 89, 164], 3488 | "hex": "#0f59a4", 3489 | "name": "飞燕草蓝", 3490 | "pinyin": "feiyancaolan", 3491 | "lightSuitable": true, 3492 | "darkSuitable": false 3493 | }, 3494 | { 3495 | "CMYK": [95, 47, 14, 2], 3496 | "RGB": [43, 115, 175], 3497 | "hex": "#2b73af", 3498 | "name": "品蓝", 3499 | "pinyin": "pinlan", 3500 | "lightSuitable": true, 3501 | "darkSuitable": false 3502 | }, 3503 | { 3504 | "CMYK": [24, 14, 16, 1], 3505 | "RGB": [205, 209, 211], 3506 | "hex": "#cdd1d3", 3507 | "name": "银鱼白", 3508 | "pinyin": "yinyubai", 3509 | "lightSuitable": false, 3510 | "darkSuitable": true 3511 | }, 3512 | { 3513 | "CMYK": [93, 49, 17, 3], 3514 | "RGB": [49, 112, 167], 3515 | "hex": "#3170a7", 3516 | "name": "安安蓝", 3517 | "pinyin": "ananlan", 3518 | "lightSuitable": true, 3519 | "darkSuitable": false 3520 | }, 3521 | { 3522 | "CMYK": [64, 52, 39, 28], 3523 | "RGB": [94, 97, 109], 3524 | "hex": "#5e616d", 3525 | "name": "鱼尾灰", 3526 | "pinyin": "yuweihui", 3527 | "lightSuitable": true, 3528 | "darkSuitable": false 3529 | }, 3530 | { 3531 | "CMYK": [78, 60, 40, 31], 3532 | "RGB": [71, 81, 100], 3533 | "hex": "#475164", 3534 | "name": "鲸鱼灰", 3535 | "pinyin": "jingyuhui", 3536 | "lightSuitable": true, 3537 | "darkSuitable": false 3538 | }, 3539 | { 3540 | "CMYK": [69, 64, 52, 59], 3541 | "RGB": [255, 254, 250], 3542 | "hex": "#fffefa", 3543 | "name": "海参灰", 3544 | "pinyin": "haishenhui", 3545 | "lightSuitable": false, 3546 | "darkSuitable": true 3547 | }, 3548 | { 3549 | "CMYK": [76, 70, 51, 60], 3550 | "RGB": [53, 51, 60], 3551 | "hex": "#35333c", 3552 | "name": "沙鱼灰", 3553 | "pinyin": "shayuhui", 3554 | "lightSuitable": true, 3555 | "darkSuitable": false 3556 | }, 3557 | { 3558 | "CMYK": [100, 89, 54, 79], 3559 | "RGB": [15, 20, 35], 3560 | "hex": "#0f1423", 3561 | "name": "钢蓝", 3562 | "pinyin": "ganglan", 3563 | "lightSuitable": true, 3564 | "darkSuitable": false 3565 | }, 3566 | { 3567 | "CMYK": [35, 13, 13, 0], 3568 | "RGB": [186, 204, 217], 3569 | "hex": "#baccd9", 3570 | "name": "云水蓝", 3571 | "pinyin": "yunshuilan", 3572 | "lightSuitable": false, 3573 | "darkSuitable": true 3574 | }, 3575 | { 3576 | "CMYK": [55, 20, 18, 1], 3577 | "RGB": [143, 178, 201], 3578 | "hex": "#8fb2c9", 3579 | "name": "晴山蓝", 3580 | "pinyin": "qingshanlan", 3581 | "lightSuitable": false, 3582 | "darkSuitable": true 3583 | }, 3584 | { 3585 | "CMYK": [100, 60, 8, 1], 3586 | "RGB": [22, 97, 171], 3587 | "hex": "#1661ab", 3588 | "name": "靛青", 3589 | "pinyin": "dianqing", 3590 | "lightSuitable": true, 3591 | "darkSuitable": false 3592 | }, 3593 | { 3594 | "CMYK": [29, 16, 17, 1], 3595 | "RGB": [196, 203, 207], 3596 | "hex": "#c4cbcf", 3597 | "name": "大理石灰", 3598 | "pinyin": "dalishihui", 3599 | "lightSuitable": false, 3600 | "darkSuitable": true 3601 | }, 3602 | { 3603 | "CMYK": [100, 67, 16, 3], 3604 | "RGB": [21, 85, 154], 3605 | "hex": "#15559a", 3606 | "name": "海涛蓝", 3607 | "pinyin": "haitaolan", 3608 | "lightSuitable": true, 3609 | "darkSuitable": false 3610 | }, 3611 | { 3612 | "CMYK": [81, 41, 24, 8], 3613 | "RGB": [78, 124, 161], 3614 | "hex": "#4e7ca1", 3615 | "name": "蝶翅蓝", 3616 | "pinyin": "diechilan", 3617 | "lightSuitable": true, 3618 | "darkSuitable": false 3619 | }, 3620 | { 3621 | "CMYK": [93, 50, 21, 6], 3622 | "RGB": [52, 108, 156], 3623 | "hex": "#346c9c", 3624 | "name": "海军蓝", 3625 | "pinyin": "haijunlan", 3626 | "lightSuitable": true, 3627 | "darkSuitable": false 3628 | }, 3629 | { 3630 | "CMYK": [77, 68, 54, 66], 3631 | "RGB": [47, 47, 53], 3632 | "hex": "#2f2f35", 3633 | "name": "水牛灰", 3634 | "pinyin": "shuiniuhui", 3635 | "lightSuitable": true, 3636 | "darkSuitable": false 3637 | }, 3638 | { 3639 | "CMYK": [80, 70, 53, 65], 3640 | "RGB": [45, 46, 54], 3641 | "hex": "#2d2e36", 3642 | "name": "牛角灰", 3643 | "pinyin": "niujiaohui", 3644 | "lightSuitable": true, 3645 | "darkSuitable": false 3646 | }, 3647 | { 3648 | "CMYK": [100, 86, 54, 78], 3649 | "RGB": [19, 24, 36], 3650 | "hex": "#131824", 3651 | "name": "燕颔蓝", 3652 | "pinyin": "yanhanlan", 3653 | "lightSuitable": true, 3654 | "darkSuitable": false 3655 | }, 3656 | { 3657 | "CMYK": [21, 6, 10, 0], 3658 | "RGB": [216, 227, 231], 3659 | "hex": "#d8e3e7", 3660 | "name": "云峰白", 3661 | "pinyin": "yunfengbai", 3662 | "lightSuitable": false, 3663 | "darkSuitable": true 3664 | }, 3665 | { 3666 | "CMYK": [32, 8, 13, 0], 3667 | "RGB": [195, 215, 223], 3668 | "hex": "#c3d7df", 3669 | "name": "井天蓝", 3670 | "pinyin": "jingtianlan", 3671 | "lightSuitable": false, 3672 | "darkSuitable": true 3673 | }, 3674 | { 3675 | "CMYK": [91, 24, 22, 4], 3676 | "RGB": [47, 144, 185], 3677 | "hex": "#2f90b9", 3678 | "name": "云山蓝", 3679 | "pinyin": "yunshanlan", 3680 | "lightSuitable": false, 3681 | "darkSuitable": true 3682 | }, 3683 | { 3684 | "CMYK": [96, 34, 18, 4], 3685 | "RGB": [23, 129, 181], 3686 | "hex": "#1781b5", 3687 | "name": "釉蓝", 3688 | "pinyin": "youlan", 3689 | "lightSuitable": true, 3690 | "darkSuitable": false 3691 | }, 3692 | { 3693 | "CMYK": [28, 12, 17, 0], 3694 | "RGB": [199, 210, 212], 3695 | "hex": "#c7d2d4", 3696 | "name": "鸥蓝", 3697 | "pinyin": "oulan", 3698 | "lightSuitable": false, 3699 | "darkSuitable": true 3700 | }, 3701 | { 3702 | "CMYK": [100, 53, 21, 6], 3703 | "RGB": [17, 101, 154], 3704 | "hex": "#11659a", 3705 | "name": "搪磁蓝", 3706 | "pinyin": "tangcilan", 3707 | "lightSuitable": true, 3708 | "darkSuitable": false 3709 | }, 3710 | { 3711 | "CMYK": [29, 18, 21, 2], 3712 | "RGB": [192, 196, 195], 3713 | "hex": "#c0c4c3", 3714 | "name": "月影白", 3715 | "pinyin": "yueyingbai", 3716 | "lightSuitable": false, 3717 | "darkSuitable": true 3718 | }, 3719 | { 3720 | "CMYK": [36, 20, 23, 2], 3721 | "RGB": [178, 187, 190], 3722 | "hex": "#b2bbbe", 3723 | "name": "星灰", 3724 | "pinyin": "xinghui", 3725 | "lightSuitable": false, 3726 | "darkSuitable": true 3727 | }, 3728 | { 3729 | "CMYK": [70, 38, 36, 18], 3730 | "RGB": [94, 121, 135], 3731 | "hex": "#5e7987", 3732 | "name": "淡蓝灰", 3733 | "pinyin": "danlanhui", 3734 | "lightSuitable": true, 3735 | "darkSuitable": false 3736 | }, 3737 | { 3738 | "CMYK": [100, 68, 32, 20], 3739 | "RGB": [20, 74, 116], 3740 | "hex": "#144a74", 3741 | "name": "鷃蓝", 3742 | "pinyin": "yanlan", 3743 | "lightSuitable": true, 3744 | "darkSuitable": false 3745 | }, 3746 | { 3747 | "CMYK": [55, 40, 40, 23], 3748 | "RGB": [116, 120, 122], 3749 | "hex": "#74787a", 3750 | "name": "嫩灰", 3751 | "pinyin": "nenhui", 3752 | "lightSuitable": true, 3753 | "darkSuitable": false 3754 | }, 3755 | { 3756 | "CMYK": [77, 50, 41, 31], 3757 | "RGB": [73, 92, 105], 3758 | "hex": "#495c69", 3759 | "name": "战舰灰", 3760 | "pinyin": "zhanjianhui", 3761 | "lightSuitable": true, 3762 | "darkSuitable": false 3763 | }, 3764 | { 3765 | "CMYK": [67, 57, 49, 49], 3766 | "RGB": [71, 72, 76], 3767 | "hex": "#47484c", 3768 | "name": "瓦罐灰", 3769 | "pinyin": "waguanhui", 3770 | "lightSuitable": true, 3771 | "darkSuitable": false 3772 | }, 3773 | { 3774 | "CMYK": [87, 69, 51, 58], 3775 | "RGB": [43, 51, 62], 3776 | "hex": "#2b333e", 3777 | "name": "青灰", 3778 | "pinyin": "qinghui", 3779 | "lightSuitable": true, 3780 | "darkSuitable": false 3781 | }, 3782 | { 3783 | "CMYK": [100, 77, 50, 62], 3784 | "RGB": [28, 41, 56], 3785 | "hex": "#1c2938", 3786 | "name": "鸽蓝", 3787 | "pinyin": "gelan", 3788 | "lightSuitable": true, 3789 | "darkSuitable": false 3790 | }, 3791 | { 3792 | "CMYK": [100, 82, 51, 64], 3793 | "RGB": [20, 35, 52], 3794 | "hex": "#142334", 3795 | "name": "钢青", 3796 | "pinyin": "gangqing", 3797 | "lightSuitable": true, 3798 | "darkSuitable": false 3799 | }, 3800 | { 3801 | "CMYK": [100, 84, 51, 68], 3802 | "RGB": [16, 31, 48], 3803 | "hex": "#101f30", 3804 | "name": "暗蓝", 3805 | "pinyin": "anlan", 3806 | "lightSuitable": true, 3807 | "darkSuitable": false 3808 | }, 3809 | { 3810 | "CMYK": [11, 0, 8, 0], 3811 | "RGB": [238, 247, 242], 3812 | "hex": "#eef7f2", 3813 | "name": "月白", 3814 | "pinyin": "yuebai", 3815 | "lightSuitable": false, 3816 | "darkSuitable": true 3817 | }, 3818 | { 3819 | "CMYK": [33, 0, 14, 0], 3820 | "RGB": [198, 230, 232], 3821 | "hex": "#c6e6e8", 3822 | "name": "海天蓝", 3823 | "pinyin": "haitianlan", 3824 | "lightSuitable": false, 3825 | "darkSuitable": true 3826 | }, 3827 | { 3828 | "CMYK": [57, 0, 22, 0], 3829 | "RGB": [147, 213, 220], 3830 | "hex": "#93d5dc", 3831 | "name": "清水蓝", 3832 | "pinyin": "qingshuilan", 3833 | "lightSuitable": false, 3834 | "darkSuitable": true 3835 | }, 3836 | { 3837 | "CMYK": [79, 0, 27, 0], 3838 | "RGB": [81, 196, 211], 3839 | "hex": "#51c4d3", 3840 | "name": "瀑布蓝", 3841 | "pinyin": "pubulan", 3842 | "lightSuitable": false, 3843 | "darkSuitable": true 3844 | }, 3845 | { 3846 | "CMYK": [89, 0, 29, 0], 3847 | "RGB": [41, 183, 203], 3848 | "hex": "#29b7cb", 3849 | "name": "蔚蓝", 3850 | "pinyin": "weilan", 3851 | "lightSuitable": false, 3852 | "darkSuitable": true 3853 | }, 3854 | { 3855 | "CMYK": [92, 0, 28, 0], 3856 | "RGB": [14, 176, 201], 3857 | "hex": "#0eb0c9", 3858 | "name": "孔雀蓝", 3859 | "pinyin": "kongquelan", 3860 | "lightSuitable": false, 3861 | "darkSuitable": true 3862 | }, 3863 | { 3864 | "CMYK": [93, 0, 31, 0], 3865 | "RGB": [16, 174, 194], 3866 | "hex": "#10aec2", 3867 | "name": "甸子蓝", 3868 | "pinyin": "dianzilan", 3869 | "lightSuitable": false, 3870 | "darkSuitable": true 3871 | }, 3872 | { 3873 | "CMYK": [78, 36, 0, 0], 3874 | "RGB": [87, 195, 194], 3875 | "hex": "#57c3c2", 3876 | "name": "石绿", 3877 | "pinyin": "shilv", 3878 | "lightSuitable": false, 3879 | "darkSuitable": true 3880 | }, 3881 | { 3882 | "CMYK": [40, 0, 30, 0], 3883 | "RGB": [185, 222, 201], 3884 | "hex": "#b9dec9", 3885 | "name": "竹篁绿", 3886 | "pinyin": "zhuhuanglv", 3887 | "lightSuitable": false, 3888 | "darkSuitable": true 3889 | }, 3890 | { 3891 | "CMYK": [64, 0, 46, 0], 3892 | "RGB": [131, 203, 172], 3893 | "hex": "#83cbac", 3894 | "name": "粉绿", 3895 | "pinyin": "fenlv", 3896 | "lightSuitable": false, 3897 | "darkSuitable": true 3898 | }, 3899 | { 3900 | "CMYK": [95, 0, 52, 0], 3901 | "RGB": [18, 170, 156], 3902 | "hex": "#12aa9c", 3903 | "name": "美蝶绿", 3904 | "pinyin": "meidielv", 3905 | "lightSuitable": false, 3906 | "darkSuitable": true 3907 | }, 3908 | { 3909 | "CMYK": [75, 0, 61, 0], 3910 | "RGB": [102, 193, 140], 3911 | "hex": "#66c18c", 3912 | "name": "毛绿", 3913 | "pinyin": "maolv", 3914 | "lightSuitable": false, 3915 | "darkSuitable": true 3916 | }, 3917 | { 3918 | "CMYK": [78, 0, 62, 0], 3919 | "RGB": [93, 190, 138], 3920 | "hex": "#5dbe8a", 3921 | "name": "蔻梢绿", 3922 | "pinyin": "koushaolv", 3923 | "lightSuitable": false, 3924 | "darkSuitable": true 3925 | }, 3926 | { 3927 | "CMYK": [81, 0, 62, 0], 3928 | "RGB": [85, 187, 138], 3929 | "hex": "#55bb8a", 3930 | "name": "麦苗绿", 3931 | "pinyin": "maimiaolv", 3932 | "lightSuitable": false, 3933 | "darkSuitable": true 3934 | }, 3935 | { 3936 | "CMYK": [86, 0, 63, 0], 3937 | "RGB": [69, 183, 135], 3938 | "hex": "#45b787", 3939 | "name": "蛙绿", 3940 | "pinyin": "walv", 3941 | "lightSuitable": false, 3942 | "darkSuitable": true 3943 | }, 3944 | { 3945 | "CMYK": [92, 0, 64, 0], 3946 | "RGB": [43, 174, 133], 3947 | "hex": "#2bae85", 3948 | "name": "铜绿", 3949 | "pinyin": "tonglv", 3950 | "lightSuitable": false, 3951 | "darkSuitable": true 3952 | }, 3953 | { 3954 | "CMYK": [96, 0, 64, 0], 3955 | "RGB": [27, 167, 132], 3956 | "hex": "#1ba784", 3957 | "name": "竹绿", 3958 | "pinyin": "zhulv", 3959 | "lightSuitable": false, 3960 | "darkSuitable": true 3961 | }, 3962 | { 3963 | "CMYK": [98, 2, 64, 0], 3964 | "RGB": [18, 161, 130], 3965 | "hex": "#12a182", 3966 | "name": "蓝绿", 3967 | "pinyin": "lanlv", 3968 | "lightSuitable": false, 3969 | "darkSuitable": true 3970 | }, 3971 | { 3972 | "CMYK": [32, 7, 18, 0], 3973 | "RGB": [196, 215, 214], 3974 | "hex": "#c4d7d6", 3975 | "name": "穹灰", 3976 | "pinyin": "qionghui", 3977 | "lightSuitable": false, 3978 | "darkSuitable": true 3979 | }, 3980 | { 3981 | "CMYK": [94, 11, 33, 1], 3982 | "RGB": [30, 158, 179], 3983 | "hex": "#1e9eb3", 3984 | "name": "翠蓝", 3985 | "pinyin": "cuilan", 3986 | "lightSuitable": false, 3987 | "darkSuitable": true 3988 | }, 3989 | { 3990 | "CMYK": [96, 16, 31, 3], 3991 | "RGB": [15, 149, 176], 3992 | "hex": "#0f95b0", 3993 | "name": "胆矾蓝", 3994 | "pinyin": "danfanlan", 3995 | "lightSuitable": false, 3996 | "darkSuitable": true 3997 | }, 3998 | { 3999 | "CMYK": [96, 18, 34, 4], 4000 | "RGB": [20, 145, 168], 4001 | "hex": "#1491a8", 4002 | "name": "樫鸟蓝", 4003 | "pinyin": "jianniaolan", 4004 | "lightSuitable": false, 4005 | "darkSuitable": true 4006 | }, 4007 | { 4008 | "CMYK": [64, 18, 32, 2], 4009 | "RGB": [124, 171, 177], 4010 | "hex": "#7cabb1", 4011 | "name": "闪蓝", 4012 | "pinyin": "shanlan", 4013 | "lightSuitable": false, 4014 | "darkSuitable": true 4015 | }, 4016 | { 4017 | "CMYK": [40, 24, 32, 6], 4018 | "RGB": [164, 172, 167], 4019 | "hex": "#a4aca7", 4020 | "name": "冰山蓝", 4021 | "pinyin": "bingshanlan", 4022 | "lightSuitable": false, 4023 | "darkSuitable": true 4024 | }, 4025 | { 4026 | "CMYK": [56, 26, 36, 7], 4027 | "RGB": [134, 157, 157], 4028 | "hex": "#869d9d", 4029 | "name": "虾壳青", 4030 | "pinyin": "xiakeqing", 4031 | "lightSuitable": false, 4032 | "darkSuitable": true 4033 | }, 4034 | { 4035 | "CMYK": [71, 28, 39, 10], 4036 | "RGB": [100, 142, 147], 4037 | "hex": "#648e93", 4038 | "name": "晚波蓝", 4039 | "pinyin": "wanbolan", 4040 | "lightSuitable": false, 4041 | "darkSuitable": true 4042 | }, 4043 | { 4044 | "CMYK": [89, 27, 41, 13], 4045 | "RGB": [59, 129, 140], 4046 | "hex": "#3b818c", 4047 | "name": "蜻蜓蓝", 4048 | "pinyin": "qingtinglan", 4049 | "lightSuitable": true, 4050 | "darkSuitable": false 4051 | }, 4052 | { 4053 | "CMYK": [99, 33, 38, 21], 4054 | "RGB": [18, 110, 130], 4055 | "hex": "#126e82", 4056 | "name": "玉鈫蓝", 4057 | "pinyin": "yuqinlan", 4058 | "lightSuitable": true, 4059 | "darkSuitable": false 4060 | }, 4061 | { 4062 | "CMYK": [57, 37, 42, 21], 4063 | "RGB": [115, 124, 123], 4064 | "hex": "#737c7b", 4065 | "name": "垩灰", 4066 | "pinyin": "ehui", 4067 | "lightSuitable": true, 4068 | "darkSuitable": false 4069 | }, 4070 | { 4071 | "CMYK": [65, 40, 44, 26], 4072 | "RGB": [97, 113, 114], 4073 | "hex": "#617172", 4074 | "name": "夏云灰", 4075 | "pinyin": "xiayunhui", 4076 | "lightSuitable": true, 4077 | "darkSuitable": false 4078 | }, 4079 | { 4080 | "CMYK": [100, 52, 46, 43], 4081 | "RGB": [19, 72, 87], 4082 | "hex": "#134857", 4083 | "name": "苍蓝", 4084 | "pinyin": "canglan", 4085 | "lightSuitable": true, 4086 | "darkSuitable": false 4087 | }, 4088 | { 4089 | "CMYK": [67, 53, 51, 50], 4090 | "RGB": [71, 75, 76], 4091 | "hex": "#474b4c", 4092 | "name": "黄昏灰", 4093 | "pinyin": "huanghunhui", 4094 | "lightSuitable": true, 4095 | "darkSuitable": false 4096 | }, 4097 | { 4098 | "CMYK": [94, 58, 54, 60], 4099 | "RGB": [33, 55, 61], 4100 | "hex": "#21373d", 4101 | "name": "灰蓝", 4102 | "pinyin": "huilan", 4103 | "lightSuitable": true, 4104 | "darkSuitable": false 4105 | }, 4106 | { 4107 | "CMYK": [100, 64, 56, 68], 4108 | "RGB": [19, 44, 51], 4109 | "hex": "#132c33", 4110 | "name": "深灰蓝", 4111 | "pinyin": "shenhuilan", 4112 | "lightSuitable": true, 4113 | "darkSuitable": false 4114 | }, 4115 | { 4116 | "CMYK": [49, 5, 37, 0], 4117 | "RGB": [164, 202, 182], 4118 | "hex": "#a4cab6", 4119 | "name": "玉簪绿", 4120 | "pinyin": "yuzanlv", 4121 | "lightSuitable": false, 4122 | "darkSuitable": true 4123 | }, 4124 | { 4125 | "CMYK": [96, 12, 66, 2], 4126 | "RGB": [44, 150, 120], 4127 | "hex": "#2c9678", 4128 | "name": "青矾绿", 4129 | "pinyin": "qingfanlv", 4130 | "lightSuitable": false, 4131 | "darkSuitable": true 4132 | }, 4133 | { 4134 | "CMYK": [52, 11, 37, 0], 4135 | "RGB": [154, 190, 175], 4136 | "hex": "#9abeaf", 4137 | "name": "草原远绿", 4138 | "pinyin": "caoyuanyuanlv", 4139 | "lightSuitable": false, 4140 | "darkSuitable": true 4141 | }, 4142 | { 4143 | "CMYK": [74, 14, 51, 1], 4144 | "RGB": [105, 167, 148], 4145 | "hex": "#69a794", 4146 | "name": "梧枝绿", 4147 | "pinyin": "wuzhilv", 4148 | "lightSuitable": false, 4149 | "darkSuitable": true 4150 | }, 4151 | { 4152 | "CMYK": [55, 16, 40, 1], 4153 | "RGB": [146, 179, 165], 4154 | "hex": "#92b3a5", 4155 | "name": "浪花绿", 4156 | "pinyin": "langhualv", 4157 | "lightSuitable": false, 4158 | "darkSuitable": true 4159 | }, 4160 | { 4161 | "CMYK": [99, 23, 70, 10], 4162 | "RGB": [36, 128, 103], 4163 | "hex": "#248067", 4164 | "name": "海王绿", 4165 | "pinyin": "haiwanglv", 4166 | "lightSuitable": true, 4167 | "darkSuitable": false 4168 | }, 4169 | { 4170 | "CMYK": [88, 24, 61, 9], 4171 | "RGB": [66, 134, 117], 4172 | "hex": "#428675", 4173 | "name": "亚丁绿", 4174 | "pinyin": "yadinglv", 4175 | "lightSuitable": true, 4176 | "darkSuitable": false 4177 | }, 4178 | { 4179 | "CMYK": [40, 27, 36, 8], 4180 | "RGB": [159, 163, 154], 4181 | "hex": "#9fa39a", 4182 | "name": "镍灰", 4183 | "pinyin": "niehui", 4184 | "lightSuitable": false, 4185 | "darkSuitable": true 4186 | }, 4187 | { 4188 | "CMYK": [52, 28, 42, 10], 4189 | "RGB": [138, 152, 142], 4190 | "hex": "#8a988e", 4191 | "name": "明灰", 4192 | "pinyin": "minghui", 4193 | "lightSuitable": false, 4194 | "darkSuitable": true 4195 | }, 4196 | { 4197 | "CMYK": [63, 31, 50, 14], 4198 | "RGB": [112, 136, 125], 4199 | "hex": "#70887d", 4200 | "name": "淡绿灰", 4201 | "pinyin": "danlvhui", 4202 | "lightSuitable": true, 4203 | "darkSuitable": true 4204 | }, 4205 | { 4206 | "CMYK": [82, 32, 60, 20], 4207 | "RGB": [73, 117, 104], 4208 | "hex": "#497568", 4209 | "name": "飞泉绿", 4210 | "pinyin": "feiquanlv", 4211 | "lightSuitable": true, 4212 | "darkSuitable": false 4213 | }, 4214 | { 4215 | "CMYK": [62, 43, 52, 34], 4216 | "RGB": [93, 101, 95], 4217 | "hex": "#5d655f", 4218 | "name": "狼烟灰", 4219 | "pinyin": "langyanhui", 4220 | "lightSuitable": true, 4221 | "darkSuitable": false 4222 | }, 4223 | { 4224 | "CMYK": [85, 44, 64, 52], 4225 | "RGB": [49, 74, 67], 4226 | "hex": "#314a43", 4227 | "name": "绿灰", 4228 | "pinyin": "lvhui", 4229 | "lightSuitable": true, 4230 | "darkSuitable": false 4231 | }, 4232 | { 4233 | "CMYK": [93, 46, 70, 61], 4234 | "RGB": [34, 62, 54], 4235 | "hex": "#223e36", 4236 | "name": "苍绿", 4237 | "pinyin": "canglv", 4238 | "lightSuitable": true, 4239 | "darkSuitable": false 4240 | }, 4241 | { 4242 | "CMYK": [98, 46, 73, 63], 4243 | "RGB": [26, 59, 50], 4244 | "hex": "#1a3b32", 4245 | "name": "深海绿", 4246 | "pinyin": "shenhailv", 4247 | "lightSuitable": true, 4248 | "darkSuitable": false 4249 | }, 4250 | { 4251 | "CMYK": [67, 60, 57, 68], 4252 | "RGB": [54, 52, 51], 4253 | "hex": "#363433", 4254 | "name": "长石灰", 4255 | "pinyin": "changshihui", 4256 | "lightSuitable": true, 4257 | "darkSuitable": false 4258 | }, 4259 | { 4260 | "CMYK": [82, 60, 65, 80], 4261 | "RGB": [31, 38, 35], 4262 | "hex": "#1f2623", 4263 | "name": "苷蓝绿", 4264 | "pinyin": "ganlanlv", 4265 | "lightSuitable": true, 4266 | "darkSuitable": false 4267 | }, 4268 | { 4269 | "CMYK": [90, 62, 67, 86], 4270 | "RGB": [20, 30, 27], 4271 | "hex": "#141e1b", 4272 | "name": "莽丛绿", 4273 | "pinyin": "mangconglv", 4274 | "lightSuitable": true, 4275 | "darkSuitable": false 4276 | }, 4277 | { 4278 | "CMYK": [33, 1, 29, 0], 4279 | "RGB": [198, 223, 200], 4280 | "hex": "#c6dfc8", 4281 | "name": "淡翠绿", 4282 | "pinyin": "dancuilv", 4283 | "lightSuitable": false, 4284 | "darkSuitable": true 4285 | }, 4286 | { 4287 | "CMYK": [53, 1, 44, 0], 4288 | "RGB": [158, 204, 171], 4289 | "hex": "#9eccab", 4290 | "name": "明绿", 4291 | "pinyin": "minglv", 4292 | "lightSuitable": false, 4293 | "darkSuitable": true 4294 | }, 4295 | { 4296 | "CMYK": [75, 0, 59, 0], 4297 | "RGB": [104, 184, 142], 4298 | "hex": "#68b88e", 4299 | "name": "田园绿", 4300 | "pinyin": "tianyuanlv", 4301 | "lightSuitable": false, 4302 | "darkSuitable": true 4303 | }, 4304 | { 4305 | "CMYK": [98, 0, 82, 0], 4306 | "RGB": [32, 161, 98], 4307 | "hex": "#20a162", 4308 | "name": "翠绿", 4309 | "pinyin": "cuilv", 4310 | "lightSuitable": false, 4311 | "darkSuitable": true 4312 | }, 4313 | { 4314 | "CMYK": [78, 6, 62, 0], 4315 | "RGB": [97, 172, 133], 4316 | "hex": "#61ac85", 4317 | "name": "淡绿", 4318 | "pinyin": "danlv", 4319 | "lightSuitable": false, 4320 | "darkSuitable": true 4321 | }, 4322 | { 4323 | "CMYK": [90, 7, 73, 0], 4324 | "RGB": [64, 160, 112], 4325 | "hex": "#40a070", 4326 | "name": "葱绿", 4327 | "pinyin": "conglv", 4328 | "lightSuitable": false, 4329 | "darkSuitable": true 4330 | }, 4331 | { 4332 | "CMYK": [99, 10, 91, 2], 4333 | "RGB": [34, 148, 83], 4334 | "hex": "#229453", 4335 | "name": "孔雀绿", 4336 | "pinyin": "kongquelv", 4337 | "lightSuitable": true, 4338 | "darkSuitable": true 4339 | }, 4340 | { 4341 | "CMYK": [27, 11, 27, 1], 4342 | "RGB": [202, 211, 195], 4343 | "hex": "#cad3c3", 4344 | "name": "艾绿", 4345 | "pinyin": "ailv", 4346 | "lightSuitable": false, 4347 | "darkSuitable": true 4348 | }, 4349 | { 4350 | "CMYK": [92, 14, 76, 2], 4351 | "RGB": [60, 149, 102], 4352 | "hex": "#3c9566", 4353 | "name": "蟾绿", 4354 | "pinyin": "chanlv", 4355 | "lightSuitable": false, 4356 | "darkSuitable": true 4357 | }, 4358 | { 4359 | "CMYK": [100, 17, 92, 5], 4360 | "RGB": [32, 137, 77], 4361 | "hex": "#20894d", 4362 | "name": "宫殿绿", 4363 | "pinyin": "gongdianlv", 4364 | "lightSuitable": true, 4365 | "darkSuitable": false 4366 | }, 4367 | { 4368 | "CMYK": [61, 19, 52, 3], 4369 | "RGB": [131, 167, 141], 4370 | "hex": "#83a78d", 4371 | "name": "松霜绿", 4372 | "pinyin": "songshuanglv", 4373 | "lightSuitable": false, 4374 | "darkSuitable": true 4375 | }, 4376 | { 4377 | "CMYK": [81, 19, 67, 4], 4378 | "RGB": [87, 149, 114], 4379 | "hex": "#579572", 4380 | "name": "蛋白石绿", 4381 | "pinyin": "danbaishilv", 4382 | "lightSuitable": false, 4383 | "darkSuitable": true 4384 | }, 4385 | { 4386 | "CMYK": [100, 22, 90, 10], 4387 | "RGB": [32, 127, 76], 4388 | "hex": "#207f4c", 4389 | "name": "薄荷绿", 4390 | "pinyin": "bohelv", 4391 | "lightSuitable": true, 4392 | "darkSuitable": false 4393 | }, 4394 | { 4395 | "CMYK": [66, 29, 58, 12], 4396 | "RGB": [110, 139, 116], 4397 | "hex": "#6e8b74", 4398 | "name": "瓦松绿", 4399 | "pinyin": "wasonglv", 4400 | "lightSuitable": true, 4401 | "darkSuitable": true 4402 | }, 4403 | { 4404 | "CMYK": [100, 31, 91, 25], 4405 | "RGB": [26, 104, 64], 4406 | "hex": "#1a6840", 4407 | "name": "荷叶绿", 4408 | "pinyin": "heyelv", 4409 | "lightSuitable": true, 4410 | "darkSuitable": false 4411 | }, 4412 | { 4413 | "CMYK": [62, 42, 56, 34], 4414 | "RGB": [94, 102, 91], 4415 | "hex": "#5e665b", 4416 | "name": "田螺绿", 4417 | "pinyin": "tianluolv", 4418 | "lightSuitable": true, 4419 | "darkSuitable": false 4420 | }, 4421 | { 4422 | "CMYK": [74, 42, 65, 40], 4423 | "RGB": [72, 91, 77], 4424 | "hex": "#485b4d", 4425 | "name": "白屈菜绿", 4426 | "pinyin": "baiqucailv", 4427 | "lightSuitable": true, 4428 | "darkSuitable": false 4429 | }, 4430 | { 4431 | "CMYK": [64, 57, 60, 67], 4432 | "RGB": [57, 55, 51], 4433 | "hex": "#393733", 4434 | "name": "河豚灰", 4435 | "pinyin": "hetunhui", 4436 | "lightSuitable": true, 4437 | "darkSuitable": false 4438 | }, 4439 | { 4440 | "CMYK": [68, 56, 60, 66], 4441 | "RGB": [55, 56, 52], 4442 | "hex": "#373834", 4443 | "name": "蒽油绿", 4444 | "pinyin": "enyoulv", 4445 | "lightSuitable": true, 4446 | "darkSuitable": false 4447 | }, 4448 | { 4449 | "CMYK": [76, 56, 75, 72], 4450 | "RGB": [43, 49, 44], 4451 | "hex": "#2b312c", 4452 | "name": "槲寄生绿", 4453 | "pinyin": "hujishenglv", 4454 | "lightSuitable": true, 4455 | "darkSuitable": false 4456 | }, 4457 | { 4458 | "CMYK": [91, 60, 76, 83], 4459 | "RGB": [21, 35, 27], 4460 | "hex": "#15231b", 4461 | "name": "云杉绿", 4462 | "pinyin": "yunshanlv", 4463 | "lightSuitable": true, 4464 | "darkSuitable": false 4465 | }, 4466 | { 4467 | "CMYK": [9, 1, 14, 0], 4468 | "RGB": [240, 245, 229], 4469 | "hex": "#f0f5e5", 4470 | "name": "嫩菊绿", 4471 | "pinyin": "nenjulv", 4472 | "lightSuitable": false, 4473 | "darkSuitable": true 4474 | }, 4475 | { 4476 | "CMYK": [20, 1, 23, 0], 4477 | "RGB": [223, 236, 213], 4478 | "hex": "#dfecd5", 4479 | "name": "艾背绿", 4480 | "pinyin": "aibeilv", 4481 | "lightSuitable": false, 4482 | "darkSuitable": true 4483 | }, 4484 | { 4485 | "CMYK": [47, 0, 49, 0], 4486 | "RGB": [173, 213, 162], 4487 | "hex": "#add5a2", 4488 | "name": "嘉陵水绿", 4489 | "pinyin": "jialingshuilv", 4490 | "lightSuitable": false, 4491 | "darkSuitable": true 4492 | }, 4493 | { 4494 | "CMYK": [89, 0, 96, 0], 4495 | "RGB": [65, 179, 73], 4496 | "hex": "#41b349", 4497 | "name": "玉髓绿", 4498 | "pinyin": "yusuilv", 4499 | "lightSuitable": false, 4500 | "darkSuitable": true 4501 | }, 4502 | { 4503 | "CMYK": [88, 0, 99, 0], 4504 | "RGB": [67, 178, 68], 4505 | "hex": "#43b244", 4506 | "name": "鲜绿", 4507 | "pinyin": "xianlv", 4508 | "lightSuitable": false, 4509 | "darkSuitable": true 4510 | }, 4511 | { 4512 | "CMYK": [90, 0, 100, 0], 4513 | "RGB": [65, 174, 60], 4514 | "hex": "#41ae3c", 4515 | "name": "宝石绿", 4516 | "pinyin": "baoshilv", 4517 | "lightSuitable": false, 4518 | "darkSuitable": true 4519 | }, 4520 | { 4521 | "CMYK": [18, 4, 33, 0], 4522 | "RGB": [226, 231, 191], 4523 | "hex": "#e2e7bf", 4524 | "name": "海沬绿", 4525 | "pinyin": "haimeilv", 4526 | "lightSuitable": false, 4527 | "darkSuitable": true 4528 | }, 4529 | { 4530 | "CMYK": [28, 4, 44, 0], 4531 | "RGB": [208, 222, 170], 4532 | "hex": "#d0deaa", 4533 | "name": "姚黄", 4534 | "pinyin": "yaohuang", 4535 | "lightSuitable": false, 4536 | "darkSuitable": true 4537 | }, 4538 | { 4539 | "CMYK": [44, 3, 61, 0], 4540 | "RGB": [178, 207, 135], 4541 | "hex": "#b2cf87", 4542 | "name": "橄榄石绿", 4543 | "pinyin": "ganlanshilv", 4544 | "lightSuitable": false, 4545 | "darkSuitable": true 4546 | }, 4547 | { 4548 | "CMYK": [62, 0, 76, 0], 4549 | "RGB": [140, 194, 105], 4550 | "hex": "#8cc269", 4551 | "name": "水绿", 4552 | "pinyin": "shuilv", 4553 | "lightSuitable": false, 4554 | "darkSuitable": true 4555 | }, 4556 | { 4557 | "CMYK": [42, 3, 67, 0], 4558 | "RGB": [183, 208, 122], 4559 | "hex": "#b7d07a", 4560 | "name": "芦苇绿", 4561 | "pinyin": "luweilv", 4562 | "lightSuitable": false, 4563 | "darkSuitable": true 4564 | }, 4565 | { 4566 | "CMYK": [28, 6, 66, 0], 4567 | "RGB": [210, 217, 122], 4568 | "hex": "#d2d97a", 4569 | "name": "槐花黄绿", 4570 | "pinyin": "huaihuahuanglv", 4571 | "lightSuitable": false, 4572 | "darkSuitable": true 4573 | }, 4574 | { 4575 | "CMYK": [41, 4, 76, 0], 4576 | "RGB": [186, 207, 101], 4577 | "hex": "#bacf65", 4578 | "name": "苹果绿", 4579 | "pinyin": "pingguolv", 4580 | "lightSuitable": false, 4581 | "darkSuitable": true 4582 | }, 4583 | { 4584 | "CMYK": [58, 1, 88, 0], 4585 | "RGB": [150, 194, 78], 4586 | "hex": "#96c24e", 4587 | "name": "芽绿", 4588 | "pinyin": "yalv", 4589 | "lightSuitable": false, 4590 | "darkSuitable": true 4591 | }, 4592 | { 4593 | "CMYK": [19, 9, 84, 1], 4594 | "RGB": [226, 216, 73], 4595 | "hex": "#e2d849", 4596 | "name": "蝶黄", 4597 | "pinyin": "diehuang", 4598 | "lightSuitable": false, 4599 | "darkSuitable": true 4600 | }, 4601 | { 4602 | "CMYK": [38, 8, 94, 1], 4603 | "RGB": [190, 201, 54], 4604 | "hex": "#bec936", 4605 | "name": "橄榄黄绿", 4606 | "pinyin": "ganlanhuanglv", 4607 | "lightSuitable": false, 4608 | "darkSuitable": true 4609 | }, 4610 | { 4611 | "CMYK": [81, 0, 100, 0], 4612 | "RGB": [91, 174, 35], 4613 | "hex": "#5bae23", 4614 | "name": "鹦鹉绿", 4615 | "pinyin": "yingwulv", 4616 | "lightSuitable": false, 4617 | "darkSuitable": true 4618 | }, 4619 | { 4620 | "CMYK": [84, 64, 94, 45], 4621 | "RGB": [37, 61, 36], 4622 | "hex": "#253d24", 4623 | "name": "油绿", 4624 | "pinyin": "youlv", 4625 | "lightSuitable": true, 4626 | "darkSuitable": false 4627 | }, 4628 | { 4629 | "CMYK": [0, 1, 4, 0], 4630 | "RGB": [255, 254, 248], 4631 | "hex": "#fffef8", 4632 | "name": "象牙白", 4633 | "pinyin": "xiangyabai", 4634 | "lightSuitable": false, 4635 | "darkSuitable": true 4636 | }, 4637 | { 4638 | "CMYK": [3, 5, 8, 0], 4639 | "RGB": [248, 244, 237], 4640 | "hex": "#f8f4ed", 4641 | "name": "汉白玉", 4642 | "pinyin": "hanbaiyu", 4643 | "lightSuitable": false, 4644 | "darkSuitable": true 4645 | }, 4646 | { 4647 | "CMYK": [0, 1, 3, 0], 4648 | "RGB": [255, 254, 249], 4649 | "hex": "#fffef9", 4650 | "name": "雪白", 4651 | "pinyin": "xuebai", 4652 | "lightSuitable": false, 4653 | "darkSuitable": true 4654 | }, 4655 | { 4656 | "CMYK": [4, 4, 8, 0], 4657 | "RGB": [247, 244, 237], 4658 | "hex": "#f7f4ed", 4659 | "name": "鱼肚白", 4660 | "pinyin": "yudubai", 4661 | "lightSuitable": false, 4662 | "darkSuitable": true 4663 | }, 4664 | { 4665 | "CMYK": [12, 12, 16, 0], 4666 | "RGB": [228, 223, 215], 4667 | "hex": "#e4dfd7", 4668 | "name": "珍珠灰", 4669 | "pinyin": "zhenzhuhui", 4670 | "lightSuitable": false, 4671 | "darkSuitable": true 4672 | }, 4673 | { 4674 | "CMYK": [16, 15, 20, 1], 4675 | "RGB": [218, 212, 203], 4676 | "hex": "#dad4cb", 4677 | "name": "浅灰", 4678 | "pinyin": "qianhui", 4679 | "lightSuitable": false, 4680 | "darkSuitable": true 4681 | }, 4682 | { 4683 | "CMYK": [28, 5, 30, 5], 4684 | "RGB": [187, 181, 172], 4685 | "hex": "#bbb5ac", 4686 | "name": "铅灰", 4687 | "pinyin": "qianhui", 4688 | "lightSuitable": false, 4689 | "darkSuitable": true 4690 | }, 4691 | { 4692 | "CMYK": [28, 25, 30, 5], 4693 | "RGB": [187, 181, 172], 4694 | "hex": "#bbb5ac", 4695 | "name": "中灰", 4696 | "pinyin": "zhonghui", 4697 | "lightSuitable": false, 4698 | "darkSuitable": true 4699 | }, 4700 | { 4701 | "CMYK": [42, 40, 43, 23], 4702 | "RGB": [134, 126, 118], 4703 | "hex": "#867e76", 4704 | "name": "瓦灰", 4705 | "pinyin": "wahui", 4706 | "lightSuitable": true, 4707 | "darkSuitable": true 4708 | }, 4709 | { 4710 | "CMYK": [43, 40, 44, 42], 4711 | "RGB": [132, 124, 116], 4712 | "hex": "#847c74", 4713 | "name": "夜灰", 4714 | "pinyin": "yehui", 4715 | "lightSuitable": true, 4716 | "darkSuitable": true 4717 | }, 4718 | { 4719 | "CMYK": [42, 42, 45, 27], 4720 | "RGB": [128, 118, 110], 4721 | "hex": "#80766e", 4722 | "name": "雁灰", 4723 | "pinyin": "yanhui", 4724 | "lightSuitable": true, 4725 | "darkSuitable": false 4726 | }, 4727 | { 4728 | "CMYK": [42, 42, 46, 27], 4729 | "RGB": [129, 119, 110], 4730 | "hex": "#81776e", 4731 | "name": "深灰", 4732 | "pinyin": "shenhui", 4733 | "lightSuitable": true, 4734 | "darkSuitable": false 4735 | } 4736 | ] 4737 | -------------------------------------------------------------------------------- /src/fonts/JXZhuoKai.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/src/fonts/JXZhuoKai.woff -------------------------------------------------------------------------------- /src/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from 'react-dom'; 3 | import App from './App'; 4 | 5 | render(, document.getElementById('root')); 6 | -------------------------------------------------------------------------------- /src/jizhi-favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/src/jizhi-favicon.ico -------------------------------------------------------------------------------- /src/setupTests.js: -------------------------------------------------------------------------------- 1 | import { configure } from 'enzyme'; 2 | import Adapter from 'enzyme-adapter-react-16'; 3 | 4 | configure({ adapter: new Adapter() }); 5 | -------------------------------------------------------------------------------- /src/sketchs/blobs.js: -------------------------------------------------------------------------------- 1 | import blobsColors from '../constants/colors'; 2 | 3 | export default function blobs(p) { 4 | const blobsArray = []; 5 | const colors = p.random(blobsColors); 6 | let bgColor = 230; 7 | 8 | p.setup = function () { 9 | p.createCanvas(p.windowWidth, p.windowHeight); 10 | generateBlobs(p, blobsArray, colors); 11 | }; 12 | 13 | p.draw = function () { 14 | p.clear(); 15 | p.background(bgColor); 16 | p.noStroke(); 17 | 18 | blobsArray.forEach((blob) => blob.display(p)); 19 | }; 20 | 21 | p.windowResized = function () { 22 | p.resizeCanvas(p.windowWidth, p.windowHeight); 23 | }; 24 | 25 | p.mousePressed = function () { 26 | generateBlobs(p, blobsArray, colors, p.mouseX, p.mouseY); 27 | }; 28 | 29 | p.updateWithProps = function (newProps) { 30 | !newProps.isPlaying ? p.frameRate(0) : p.frameRate(30); 31 | bgColor = newProps.isDarkMode ? 50 : 230; 32 | }; 33 | } 34 | 35 | class Blob { 36 | constructor(radius, offset, scale, x, y, tSpeed, color) { 37 | this.radius = radius; 38 | this.offset = offset; 39 | this.scale = scale; 40 | this.x = x; 41 | this.y = y; 42 | this.tSpeed = tSpeed; 43 | this.c = color; 44 | this.t = 0; 45 | this.s = 0; 46 | } 47 | 48 | display(p) { 49 | p.push(); 50 | const color = p.color(this.c); 51 | color.setAlpha(230); 52 | p.fill(color); 53 | p.translate(this.x, this.y); 54 | 55 | this.s = p.lerp(this.s, 1, 0.07); 56 | p.scale(this.s); 57 | 58 | p.noiseDetail(2, 0.9); 59 | p.beginShape(); 60 | for (let i = 0; i < p.TWO_PI; i += p.radians(1)) { 61 | const xOff = this.offset * p.cos(i) + this.offset; 62 | const yOff = this.offset * p.sin(i) + this.offset; 63 | 64 | const r = this.radius + p.map(p.noise(xOff, yOff, this.t), 0, 1, -this.scale, this.scale); 65 | const x = r * p.cos(i); 66 | const y = r * p.sin(i); 67 | 68 | p.vertex(x, y); 69 | } 70 | p.endShape(); 71 | this.t += this.tSpeed; 72 | p.pop(); 73 | } 74 | } 75 | 76 | function generateBlobs(p, blobsArray, colors, positionX = null, positionY = null) { 77 | const offset = p.random(0.2, 0.6); 78 | 79 | if (positionX && positionY) { 80 | const scale = p.random(20, 40); 81 | 82 | const tSpeed = p.random(0.02, 0.05); 83 | const color = p.random(colors); 84 | 85 | const blob = new Blob(70, offset, scale, positionX, positionY, tSpeed, color); 86 | blobsArray.push(blob); 87 | } else { 88 | new Array(4).fill(1).map((_, i) => { 89 | const scale = p.random(20, 60); 90 | 91 | const x = i % 2 ? p.width / 4 + p.random(-200, 0) : (p.width / 4) * 3 + p.random(0, 200); 92 | const y = i < 2 ? p.height / 4 + p.random(-200, 0) : (p.height / 4) * 3 + p.random(0, 200); 93 | 94 | const tSpeed = p.random(0.02, 0.06); 95 | const color = colors[i % 4]; 96 | 97 | const blob = new Blob(250, offset, scale, x, y, tSpeed, color); 98 | blobsArray.push(blob); 99 | }); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/sketchs/waves.js: -------------------------------------------------------------------------------- 1 | export default function waves(p) { 2 | let mountains = []; 3 | let bgColor = '#e6e6e6'; 4 | let isDarkMode = false; 5 | let waveColor = bgColor; 6 | 7 | p.setup = function () { 8 | p.createCanvas(p.windowWidth, p.windowHeight); 9 | mountains = []; 10 | growMountains(p, mountains, waveColor); 11 | p.background(bgColor); 12 | mountains.forEach((m) => m.display(p)); 13 | }; 14 | 15 | p.draw = function () { 16 | p.background(bgColor); 17 | mountains.forEach((m) => m.display(p)); 18 | }; 19 | 20 | p.windowResized = function () { 21 | p.resizeCanvas(p.windowWidth, p.windowHeight); 22 | }; 23 | 24 | p.updateWithProps = function (newProps) { 25 | !newProps.isPlaying ? p.frameRate(0) : p.frameRate(30); 26 | bgColor = newProps.isDarkMode ? '#323232' : '#e6e6e6'; 27 | 28 | if (isDarkMode !== newProps.isDarkMode || waveColor !== newProps.waveColor) { 29 | waveColor = newProps.waveColor; 30 | isDarkMode = newProps.isDarkMode; 31 | p.setup(); 32 | } 33 | }; 34 | 35 | // p.keyPressed = function () { 36 | // if (p.keyCode === 39 || p.keyCode === 37) { 37 | // // left or right arrow keys 38 | // mountains = []; 39 | // growMountains(p, mountains, isDarkMode); 40 | // p.background(bgColor); 41 | // mountains.forEach((m) => m.display(p)); 42 | // } 43 | // }; 44 | } 45 | 46 | class Mountain { 47 | constructor(color, y, p) { 48 | this.c = color; 49 | this.y = y; 50 | this.offset = p.random(100, 200); 51 | this.t = 0; 52 | } 53 | 54 | display(p) { 55 | let xoff = 0; 56 | 57 | p.noStroke(); 58 | p.fill(this.c); 59 | 60 | p.noiseDetail(1.7, 1.3); 61 | 62 | p.beginShape(); 63 | for (let x = 0; x <= p.width + 25; x += 25) { 64 | const yoff = p.map(p.noise(xoff + this.offset, this.t + this.offset), 0, 1, 0, 200); 65 | const y = this.y - yoff; 66 | p.vertex(x, y); 67 | 68 | xoff += 0.08; 69 | } 70 | p.vertex(p.width + 100, p.height); 71 | p.vertex(0, p.height); 72 | p.endShape(p.CLOSE); 73 | 74 | this.t += 0.005; 75 | } 76 | } 77 | 78 | function growMountains(p, mountains, hexColor) { 79 | const c = p.color(hexColor); 80 | 81 | new Array(5).fill(1).map((_, i) => { 82 | const a = 255 - 50 * i; 83 | c.setAlpha(a); 84 | const h = p.height - 50 * i; 85 | const m = new Mountain(c, h, p); 86 | mountains.push(m); 87 | }); 88 | } 89 | -------------------------------------------------------------------------------- /src/static/icons/jizhi-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/src/static/icons/jizhi-128.png -------------------------------------------------------------------------------- /src/static/icons/jizhi-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/src/static/icons/jizhi-16.png -------------------------------------------------------------------------------- /src/static/icons/jizhi-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/src/static/icons/jizhi-32.png -------------------------------------------------------------------------------- /src/static/icons/jizhi-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unicar9/jizhi/e640cabf265e802167714eae81e5de93cfa065ff/src/static/icons/jizhi-64.png -------------------------------------------------------------------------------- /src/utils/index.js: -------------------------------------------------------------------------------- 1 | import domtoimage from 'retina-dom-to-image'; 2 | import axios from 'axios'; 3 | import { sample } from 'lodash'; 4 | import wavesColors from '../constants/wavesColors.json'; 5 | import storager from './storager'; 6 | 7 | export const filter = (node) => { 8 | return node.id !== 'menu-button' && node.id !== 'jizhi-search-icon'; 9 | }; 10 | 11 | export const isDarkModeEnabled = () => { 12 | const result = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; 13 | 14 | return result; 15 | }; 16 | 17 | export const saveBackground = () => { 18 | const node = document.getElementById('root'); 19 | const githubLink = 'https://github.com/unicar9/jizhi/issues'; 20 | domtoimage 21 | .toPng(node, { filter }) 22 | .then((dataUrl) => { 23 | const link = document.createElement('a'); 24 | link.download = 'jizhi.png'; 25 | link.href = dataUrl; 26 | link.click(); 27 | }) 28 | .catch((error) => { 29 | console.error(`截图失败,联系我们: ${githubLink}`, error); 30 | }); 31 | }; 32 | 33 | /* 34 | filter out Chinese chars: 35 | 。 \u3002 36 | , \uff0c 37 | 、 \u3001 38 | ? \uff1f 39 | ! \uff01 40 | */ 41 | export const pureWords = (sentense = '') => { 42 | const regex = /[\u3002|\uff0c|\u3001|\uff1f|\uff01]/gi; 43 | return sentense.replace(regex, ' '); 44 | }; 45 | 46 | export const insertFont = (data) => { 47 | const style = document.createElement('style'); 48 | style.textContent = data; 49 | document.head.appendChild(style); 50 | }; 51 | 52 | export const fetchAndSetFont = async (fontName) => { 53 | const WEB_FONT_URL = `https://romantic-bell-b49acd.netlify.app/${fontName}.woff.json`; 54 | 55 | return new Promise((resolve, reject) => { 56 | axios 57 | .get(WEB_FONT_URL, { crossdomain: true }) 58 | .then((res) => { 59 | insertFont(res.data.value); 60 | storager.set({ fonts: res.data }); 61 | return resolve(res.data); 62 | }) 63 | .catch((error) => { 64 | return reject(error); 65 | }); 66 | }); 67 | }; 68 | 69 | export const pickColor = (isDarkMode) => { 70 | const suitableColors = isDarkMode 71 | ? wavesColors.filter((c) => c.darkSuitable) 72 | : wavesColors.filter((c) => c.lightSuitable); 73 | 74 | return sample(suitableColors); 75 | }; 76 | -------------------------------------------------------------------------------- /src/utils/jinrishici.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2019 今日诗词 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // 今日诗词 V2 NPM-SDK 1.0.0 18 | // 今日诗词API 是一个可以免费调用的诗词接口:https://www.jinrishici.com 19 | 20 | const keyName = 'jinrishici-token'; 21 | 22 | const load = (callback, errHandler) => { 23 | if (window.localStorage && window.localStorage.getItem(keyName)) { 24 | return commonLoad(callback, errHandler, window.localStorage.getItem(keyName)); 25 | } else { 26 | return corsLoad(callback, errHandler); 27 | } 28 | }; 29 | 30 | const corsLoad = (callback, errHandler) => { 31 | const newCallBack = function (result) { 32 | window.localStorage.setItem(keyName, result.token); 33 | callback(result); 34 | }; 35 | return sendRequest( 36 | newCallBack, 37 | errHandler, 38 | 'https://v2.jinrishici.com/one.json?client=npm-sdk/1.0' 39 | ); 40 | }; 41 | 42 | const commonLoad = (callback, errHandler, token) => { 43 | return sendRequest( 44 | callback, 45 | errHandler, 46 | 'https://v2.jinrishici.com/one.json?client=npm-sdk/1.0&X-User-Token=' + 47 | encodeURIComponent(token) 48 | ); 49 | }; 50 | 51 | const sendRequest = (callback, errHandler, apiUrl) => { 52 | const xhr = new XMLHttpRequest(); 53 | xhr.open('get', apiUrl); 54 | xhr.withCredentials = true; 55 | xhr.send(); 56 | xhr.onreadystatechange = function () { 57 | if (xhr.readyState === 4) { 58 | let data = xhr.responseText 59 | ? JSON.parse(xhr.responseText) 60 | : { errMessage: '无法获取诗词,请检查网络连接,正为您显示本地诗词...' }; 61 | if (data.status === 'success') { 62 | callback(data); 63 | } else { 64 | if (errHandler) { 65 | errHandler(data); 66 | } else { 67 | console.error('今日诗词API加载失败,错误原因:' + data.errMessage); 68 | } 69 | } 70 | } 71 | }; 72 | }; 73 | 74 | export { load }; 75 | -------------------------------------------------------------------------------- /src/utils/storager.js: -------------------------------------------------------------------------------- 1 | const storageLocal = { 2 | name: 'localStorage', 3 | set: (obj, callback) => { 4 | const key = Object.keys(obj)[0]; 5 | const output = {}; 6 | output[key] = obj[key]; 7 | const value = JSON.stringify(output); 8 | localStorage.setItem(key, value); 9 | if (callback) callback(); 10 | }, 11 | get: (keys, callback) => { 12 | let resOutput = {}; 13 | keys.forEach((key) => { 14 | let result = localStorage.getItem(key); 15 | result = JSON.parse(result) || {}; 16 | resOutput = { ...resOutput, ...result }; 17 | }); 18 | 19 | if (callback) callback(resOutput); 20 | }, 21 | }; 22 | 23 | // Default using: chrome.storage.sync 24 | // eslint-disable-next-line no-undef 25 | // const storager = process.env.NODE_ENV === 'development' ? storageLocal : chrome.storage.local; 26 | const storager = storageLocal; 27 | 28 | export default storager; 29 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | // Whilst the configuration object can be modified here, the recommended way of making 2 | // changes is via the presets' options or Neutrino's API in `.neutrinorc.js` instead. 3 | // Neutrino's inspect feature can be used to view/export the generated configuration. 4 | const path = require('path'); 5 | const neutrino = require('neutrino'); 6 | const CopyPlugin = require('copy-webpack-plugin'); 7 | 8 | const basicConfig = neutrino().webpack(); 9 | 10 | const generateConfig = (config, browser) => { 11 | const { output, plugins } = config; 12 | return { 13 | ...config, 14 | output: { 15 | ...output, 16 | path: path.resolve(__dirname, `./builds/build_${browser}`), 17 | }, 18 | plugins: [ 19 | ...plugins, 20 | new CopyPlugin([ 21 | { from: `./${browser}.manifest.json`, to: './manifest.json' }, 22 | { from: `./${browser}.background.js`, to: './background.js' }, 23 | ]), 24 | ], 25 | }; 26 | }; 27 | 28 | const chromeConfig = generateConfig(basicConfig, 'chrome'); 29 | const ffConfig = generateConfig(basicConfig, 'firefox'); 30 | 31 | module.exports = [chromeConfig, ffConfig]; 32 | --------------------------------------------------------------------------------