3.2.38 自动头像补 4 套风格:avataaars / bottts 及其带底色版 #7

上一版只收录 14 套,把 avataaars、bottts 两个系列漏掉了。原因是 3.2.36
盘点时,这四套的 npm 包里 license 字段写的是「See LICENSE file」,被我
当成「措辞不明、先不收」。点进去看实际条款是
「Free for personal and commercial use」(设计者 Pablo Stanley,
来源 avataaars.com / bottts.com),而且不要求署名 —— 比收录的 CC BY
那十几套还宽松。方向判断反了,这是错误,不是许可限制。

改动:
- 新增 inc/avatar-styles/ 四份模板:avataaars、avataaars_neutral、
  bottts、bottts_neutral(合计 227 KB,风格总数 14 → 18)
- yang_avatar_styles() 注册四套中文名与说明,排在「首字母」之后
- avataaars 的 onPostCreate 三条规则逐条复刻:
  ① style 组为 circle 时清空背景;
  ② 背景恰好只剩 65c9ff 一项时清空(判「恰好只有一个」,不是「包含」);
  ③ 戴头巾且胡子概率非 100 时去掉胡子。
  为此 yang_avatar_post_create() 增加 $picked 形参(官方读
  components.style.name / components.top.name,不传拿不到),
  返回值由 2 项改为 3 项($on 会被改,必须带出来)。
- 后台风格说明由「都是 CC0 或 MIT 许可」改为「都可自由使用与商用,
  且不要求署名」—— 加了这四套后前者已不准确
- 文件头许可清单补上「作者自定义许可」一类

验证(先证明判据真能红,再谈通过):
- 逐字节 80/0:四套各 20 种种子(含中文、emoji、超长、空串)比对官方
  Node 库。第一版 avataaars 20 个全错,差异正是背景那块天蓝,补规则后对齐
- 逐字节反向 3/3:删分支、不清 65c9ff、返回值退 2 项,各红 20 项
- 规则白盒 9/0:circle / 恰好 65c9ff / 多色保留 / 含 65c9ff 不只一项保留 /
  头巾 10% 删胡子 / 头巾 100% 保留胡子 / 不戴头巾不受影响 / 别风格不受影响 /
  返回 3 项
- 规则反向 6/6:写坏任一分支,都恰好在预期那条上报错
- 原有 14 套回归 108/0(原 84 + 新 24)
- 18 套全量冒烟:每套合法 SVG、三种种子互异
- 严格错误级别 PHP 8.4.25 与 8.5.12(线上同版)各 47/0
- 几何+交互 29/0:18 卡片、18 单选、18 缩略图全部解码
- 源码守卫 55/0,反向 17/17
- 包内契约 34/0,反向 8/8
- 后台标签 88/0、CDN 56/0 与 77/0、3.2.28 13/0
- 93 个 php 文件 php -l 全通过

顺带修正两处错误的守卫(都是这次暴露出来的):
- _guard336_avatar.py 把 avataaars / bottts 错列进「CC BY 禁止收录」
  清单,改按实测许可证重写(CC BY 实为 13 套,不含这两个)
- _guard336_falsify.py 的 F2 锚点仍在匹配旧名「自动头像」,3.2.37
  改名后恒失效;版本锚点也停在上一个版本
This commit is contained in:
2026-10-25 19:41:49 +08:00
parent 5c7a9e2c1c
commit 16cc7d8328
7 changed files with 734 additions and 11 deletions
File diff suppressed because one or more lines are too long
+123
View File
@@ -0,0 +1,123 @@
<?php
return array(
'name' => 'avataaars-neutral',
'meta' => array(
'title' => 'Avataaars',
'creator' => 'Pablo Stanley',
'source' => 'https://avataaars.com/',
'license_name' => 'Free for personal and commercial use.',
'license_url' => 'https://avataaars.com/',
),
'view_box' => '0 0 112 112',
'clip_default' => true,
'has_pre_create' => false,
'has_post_create' => false,
'is_initials' => false,
'attr_pairs' => array(
array('viewBox', '0 0 112 112'),
array('fill', 'none'),
array('shape-rendering', 'auto'),
),
'bg_colors' => array('614335', 'd08b5b', 'ae5d29', 'edb98a', 'ffdbb4', 'fd9841', 'f8d25c'),
'bg_type' => array('solid'),
'bg_rotation' => array('0', '360'),
'body_template' => '<g transform="translate(2 63)">@@k:mouth@@</g><g transform="translate(28 51)">@@k:nose@@</g><g transform="translate(0 19)">@@k:eyes@@</g><g transform="translate(0 11)">@@k:eyebrows@@</g>',
'pick_order' => array('mouth', 'nose', 'eyes', 'eyebrows'),
'bool_order' => array(),
'color_order' => array(
),
'pc_has_ints' => false,
'pc_meta' => array(
array(
'group' => 'mouth',
'values_opt' => 'mouth',
'width' => 0,
'height' => 0,
'rotation' => array('opt' => null, 'fallback' => array('0')),
'offsetX' => array('opt' => null, 'fallback' => array('0')),
'offsetY' => array('opt' => null, 'fallback' => array('0')),
),
array(
'group' => 'nose',
'values_opt' => 'nose',
'width' => 0,
'height' => 0,
'rotation' => array('opt' => null, 'fallback' => array('0')),
'offsetX' => array('opt' => null, 'fallback' => array('0')),
'offsetY' => array('opt' => null, 'fallback' => array('0')),
),
array(
'group' => 'eyes',
'values_opt' => 'eyes',
'width' => 0,
'height' => 0,
'rotation' => array('opt' => null, 'fallback' => array('0')),
'offsetX' => array('opt' => null, 'fallback' => array('0')),
'offsetY' => array('opt' => null, 'fallback' => array('0')),
),
array(
'group' => 'eyebrows',
'values_opt' => 'eyebrows',
'width' => 0,
'height' => 0,
'rotation' => array('opt' => null, 'fallback' => array('0')),
'offsetX' => array('opt' => null, 'fallback' => array('0')),
'offsetY' => array('opt' => null, 'fallback' => array('0')),
),
),
'defaults' => array(
'backgroundColor' => array('614335', 'd08b5b', 'ae5d29', 'edb98a', 'ffdbb4', 'fd9841', 'f8d25c'),
'eyebrows' => array('angryNatural', 'defaultNatural', 'flatNatural', 'frownNatural', 'raisedExcitedNatural', 'sadConcernedNatural', 'unibrowNatural', 'upDownNatural', 'angry', 'default', 'raisedExcited', 'sadConcerned', 'upDown'),
'eyes' => array('closed', 'cry', 'default', 'eyeRoll', 'happy', 'hearts', 'side', 'squint', 'surprised', 'winkWacky', 'wink', 'xDizzy'),
'mouth' => array('concerned', 'default', 'disbelief', 'eating', 'grimace', 'sad', 'screamOpen', 'serious', 'smile', 'tongue', 'twinkle', 'vomit'),
'nose' => array('default'),
),
'groups' => array(
'mouth' => array(
'concerned' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M35.12 29.87a19 19 0 0 1 37.77.09c.08.77-.77 2.04-1.85 2.04H37.1C36 32 35 30.82 35.12 29.87Z" fill="#000" fill-opacity=".7"/><path d="M69.59 32H38.4a11 11 0 0 1 15.6-6.8A11 11 0 0 1 69.59 32Z" fill="#FF4F6D"/><path d="M66.57 17.75A5 5 0 0 1 65 18H44c-.8 0-1.57-.2-2.24-.53A18.92 18.92 0 0 1 54 13c4.82 0 9.22 1.8 12.57 4.75Z" fill="#fff"/>',
'default' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M40 15a14 14 0 1 0 28 0" fill="#000" fill-opacity=".7"/>',
'disbelief' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M40 29a14 14 0 1 1 28 0" fill="#000" fill-opacity=".7"/>',
'eating' => '<path d="M28 26.24c1.36.5 2.84.76 4.4.76 5.31 0 9.81-3.15 11.29-7.49 2.47 2.17 6.17 3.54 10.31 3.54 4.14 0 7.84-1.37 10.31-3.53 1.48 4.35 5.98 7.5 11.3 7.5 1.55 0 3.03-.27 4.4-.76h-.19c-6.33 0-11.8-4.9-11.8-10.56 0-4.18 2.32-7.72 5.69-9.68-5.5.8-9.73 5-9.9 10.1a17.61 17.61 0 0 1-9.8 2.8c-3.8 0-7.25-1.06-9.8-2.8-.18-5.1-4.4-9.3-9.9-10.1a11.18 11.18 0 0 1 5.68 9.68c0 5.66-5.47 10.57-11.8 10.57H28Z" fill="#000" fill-opacity=".6" opacity=".6"/><path d="M17 24a9 9 0 1 0 0-18 9 9 0 0 0 0 18ZM91 24a9 9 0 1 0 0-18 9 9 0 0 0 0 18Z" fill="#FF4646" fill-opacity=".2"/>',
'grimace' => '<rect x="22" y="7" width="64" height="26" rx="13" fill="#000" fill-opacity=".6"/><rect x="24" y="9" width="60" height="22" rx="11" fill="#fff"/><path d="M24.18 18H32V9.41A11 11 0 0 1 35 9h1v9h9V9h4v9h9V9h4v9h9V9h2c.68 0 1.35.06 2 .18V18h8.82l.05.28v3.44l-.05.28H75v8.82c-.65.12-1.32.18-2 .18h-2v-9h-9v9h-4v-9h-9v9h-4v-9h-9v9h-1a11 11 0 0 1-3-.41V22h-7.82a11.06 11.06 0 0 1 0-4Z" fill="#E6E6E6"/>',
'sad' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M40.06 27.72C40.7 20.7 46.7 16 54 16c7.34 0 13.36 4.75 13.95 11.85.03.38-.87.67-1.32.45-5.54-2.77-9.75-4.16-12.63-4.16-2.84 0-7 1.36-12.45 4.07-.5.25-1.53-.07-1.5-.49Z" fill="#000" fill-opacity=".7"/>',
'screamOpen' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M34 38.86C35.14 24.88 38.24 13.01 54 13c15.76 0 18.92 11.94 20 26 .08 1.12-.83 2-1.96 2-6.69 0-9.37-2-18.05-2-8.7 0-13.24 2-17.9 2-1.15 0-2.2-.74-2.1-2.14Z" fill="#000" fill-opacity=".7"/><path d="M67.02 17.57c-.61.28-1.3.43-2.02.43H44c-.98 0-1.9-.28-2.67-.77C44.23 14.57 48.28 13 54 13c5.95 0 10.1 1.7 13.02 4.57Z" fill="#fff"/><path d="M69.8 40.92a44.2 44.2 0 0 1-5.54-.82c-2.73-.53-5.65-1.1-10.27-1.1-5.02 0-8.66.66-11.74 1.23-1.45.26-2.77.5-4.06.65A11 11 0 0 1 54 33.2a11 11 0 0 1 15.8 7.72Z" fill="#FF4F6D"/>',
'serious' => '<rect x="42" y="18" width="24" height="6" rx="3" fill="#000" fill-opacity=".7"/>',
'smile' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M35.12 15.13a19 19 0 0 0 37.77-.09c.08-.77-.77-2.04-1.85-2.04H37.1C36 13 35 14.18 35.12 15.13Z" fill="#000" fill-opacity=".7"/><path d="M70 13H39a5 5 0 0 0 5 5h21a5 5 0 0 0 5-5Z" fill="#fff"/><path d="M66.7 27.14A10.96 10.96 0 0 0 54 25.2a10.95 10.95 0 0 0-12.7 1.94A18.93 18.93 0 0 0 54 32c4.88 0 9.33-1.84 12.7-4.86Z" fill="#FF4F6D"/>',
'tongue' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M29 15.6C30.41 25.24 41.06 33 54 33c12.97 0 23.65-7.82 25-18.26.1-.4-.22-1.74-2.17-1.74H31.17c-1.79 0-2.3 1.24-2.17 2.6Z" fill="#000" fill-opacity=".7"/><path d="M70 13H39a5 5 0 0 0 5 5h21a5 5 0 0 0 5-5Z" fill="#fff"/><path d="M43 23.5a1.88 1.88 0 0 0 0 .13v8.87a11.5 11.5 0 1 0 23 0v-8.87a1.62 1.62 0 0 0 0-.13c0-1.93-2.91-3.5-6.5-3.5-2.01 0-3.8.5-5 1.26a9.45 9.45 0 0 0-5-1.26c-3.59 0-6.5 1.57-6.5 3.5Z" fill="#FF4F6D"/>',
'twinkle' => '<path d="M40 16c0 5.37 6.16 9 14 9s14-3.63 14-9c0-1.1-.95-2-2-2-1.3 0-1.87.9-2 2-1.24 2.94-4.32 4.72-10 5-5.68-.28-8.76-2.06-10-5-.13-1.1-.7-2-2-2-1.05 0-2 .9-2 2Z" fill="#000" fill-opacity=".6"/>',
'vomit' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M34 30.4C35.14 19.9 38.24 11 54 11c15.76 0 18.92 8.96 20 19.5.08.84-.83 1.5-1.96 1.5-6.69 0-9.37-1.5-18.05-1.5-8.7 0-13.24 1.5-17.9 1.5-1.15 0-2.2-.55-2.1-1.6Z" fill="#000" fill-opacity=".7"/><path d="M67.86 15.1c-.8.57-1.8.9-2.86.9H44c-1.3 0-2.49-.5-3.38-1.31C43.56 12.38 47.8 11 54 11c6.54 0 10.9 1.54 13.86 4.1Z" fill="#fff"/><path d="M42 25a6 6 0 0 0-6 6v7a6 6 0 0 0 12 0v-2h.08a6 6 0 0 1 11.84 0H60a6 6 0 0 0 12 0v-5a6 6 0 0 0-6-6H42Z" fill="#7BB24B"/><path d="M72 31a6 6 0 0 0-6-6H42a6 6 0 0 0-6 6v6a6 6 0 0 0 12 0v-2h.08a6 6 0 0 1 11.84 0H60a6 6 0 0 0 12 0v-4Z" fill="#88C553"/>',
),
'nose' => array(
'default' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M16 8c0 4.42 5.37 8 12 8s12-3.58 12-8" fill="#000" fill-opacity=".16"/>',
),
'eyes' => array(
'closed' => '<path d="M16.16 27.55c1.85 3.8 6 6.45 10.84 6.45 4.81 0 8.96-2.63 10.82-6.4.55-1.13-.24-2.05-1.03-1.37a15.05 15.05 0 0 1-9.8 3.43c-3.73 0-7.12-1.24-9.55-3.23-.9-.73-1.82.01-1.28 1.12ZM74.16 27.55c1.85 3.8 6 6.45 10.84 6.45 4.81 0 8.96-2.63 10.82-6.4.55-1.13-.24-2.05-1.03-1.37a15.05 15.05 0 0 1-9.8 3.43c-3.74 0-7.13-1.24-9.56-3.23-.9-.73-1.82.01-1.28 1.12Z" fill-rule="evenodd" clip-rule="evenodd" fill="#000" fill-opacity=".6"/>',
'cry' => '<path d="M25 27s-6 7.27-6 11.27a6 6 0 1 0 12 0c0-4-6-11.27-6-11.27Z" fill="#92D9FF"/><path d="M36 22a6 6 0 1 1-12 0 6 6 0 0 1 12 0ZM88 22a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z" fill="#000" fill-opacity=".6"/>',
'default' => '<path d="M36 22a6 6 0 1 1-12 0 6 6 0 0 1 12 0ZM88 22a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z" fill="#000" fill-opacity=".6"/>',
'eyeRoll' => '<path d="M44 22a14 14 0 1 1-28 0 14 14 0 0 1 28 0ZM96 22a14 14 0 1 1-28 0 14 14 0 0 1 28 0Z" fill="#fff"/><path d="M36 14a6 6 0 1 1-12 0 6 6 0 0 1 12 0ZM88 14a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z" fill="#000" fill-opacity=".7"/>',
'happy' => '<path d="M16.16 22.45c1.85-3.8 6-6.45 10.84-6.45 4.81 0 8.96 2.63 10.82 6.4.55 1.13-.24 2.05-1.03 1.37a15.05 15.05 0 0 0-9.8-3.43c-3.73 0-7.12 1.24-9.55 3.23-.9.73-1.82-.01-1.28-1.12ZM74.16 22.45c1.85-3.8 6-6.45 10.84-6.45 4.81 0 8.96 2.63 10.82 6.4.55 1.13-.24 2.05-1.03 1.37a15.05 15.05 0 0 0-9.8-3.43c-3.74 0-7.13 1.24-9.56 3.23-.9.73-1.82-.01-1.28-1.12Z" fill-rule="evenodd" clip-rule="evenodd" fill="#000" fill-opacity=".6"/>',
'hearts' => '<path d="M35.96 10c-2.55 0-5.08 1.98-6.46 3.82-1.39-1.84-3.9-3.82-6.46-3.82-5.49 0-9.04 3.33-9.04 7.64 0 5.73 4.41 9.13 9.04 12.74 1.66 1.23 4.78 4.4 5.17 5.1.38.68 2.1.7 2.58 0 .48-.73 3.51-3.87 5.17-5.1 4.63-3.6 9.04-7 9.04-12.74 0-4.3-3.55-7.64-9.04-7.64ZM88.96 10c-2.55 0-5.08 1.98-6.46 3.82-1.39-1.84-3.9-3.82-6.46-3.82-5.49 0-9.04 3.33-9.04 7.64 0 5.73 4.41 9.13 9.04 12.74 1.65 1.23 4.78 4.4 5.17 5.1.38.68 2.1.7 2.58 0 .48-.73 3.51-3.87 5.17-5.1 4.63-3.6 9.04-7 9.04-12.74 0-4.3-3.55-7.64-9.04-7.64Z" fill="#FF5353" fill-opacity=".8"/>',
'side' => '<path d="M27 16c-4.84 0-9 2.65-10.84 6.45-.54 1.1.39 1.85 1.28 1.12a15.13 15.13 0 0 1 9.8-3.22 6 6 0 1 0 10.7 2.8 2 2 0 0 0-.12-.74l-.15-.38a6 6 0 0 0-1.64-2.48C33.9 17.32 30.5 16 27 16ZM85 16c-4.84 0-9 2.65-10.84 6.45-.54 1.1.39 1.85 1.28 1.12a15.13 15.13 0 0 1 9.8-3.22 6 6 0 1 0 10.7 2.8 2 2 0 0 0-.12-.74l-.15-.38a6 6 0 0 0-1.64-2.48C91.9 17.32 88.5 16 85 16Z" fill="#000" fill-opacity=".6"/>',
'squint' => '<path d="M44 20.73c0 4.26-6.27 7.72-14 7.72S16 25 16 20.73C16 16.46 22.27 13 30 13s14 3.46 14 7.73ZM96 20.73c0 4.26-6.27 7.72-14 7.72S68 25 68 20.73C68 16.46 74.27 13 82 13s14 3.46 14 7.73Z" fill="#fff"/><path d="M32.82 28.3a25.15 25.15 0 0 1-5.64 0 6 6 0 1 1 5.64 0ZM84.82 28.3a25.15 25.15 0 0 1-5.64 0 6 6 0 1 1 5.64 0Z" fill="#000" fill-opacity=".7"/>',
'surprised' => '<path d="M44 22a14 14 0 1 1-28 0 14 14 0 0 1 28 0ZM96 22a14 14 0 1 1-28 0 14 14 0 0 1 28 0Z" fill="#fff"/><path d="M36 22a6 6 0 1 1-12 0 6 6 0 0 1 12 0ZM88 22a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z" fill="#000" fill-opacity=".7"/>',
'winkWacky' => '<circle cx="82" cy="22" r="12" fill="#fff"/><circle cx="82" cy="22" r="6" fill="#000" fill-opacity=".7"/><path fill-rule="evenodd" clip-rule="evenodd" d="M16.16 25.45c1.85-3.8 6-6.45 10.84-6.45 4.81 0 8.96 2.63 10.82 6.4.55 1.13-.24 2.05-1.03 1.37a15.05 15.05 0 0 0-9.8-3.43c-3.73 0-7.12 1.24-9.55 3.23-.9.73-1.82-.01-1.28-1.12Z" fill="#000" fill-opacity=".6"/>',
'wink' => '<g fill="#000" fill-opacity=".6"><path d="M36 22a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M70.6 24.96c1.59-3.92 5.55-6.86 10.37-7.2 4.8-.33 9.12 2 11.24 5.64.63 1.09-.1 2.06-.93 1.43-2.6-1.93-6.15-3-10-2.73A15.13 15.13 0 0 0 71.95 26c-.84.78-1.81.1-1.35-1.04Z"/></g>',
'xDizzy' => '<path d="M34.5 30.7 29 25.2l-5.5 5.5c-.4.4-1.1.4-1.6 0l-1.6-1.6c-.4-.4-.4-1.1 0-1.6l5.5-5.5-5.5-5.5c-.4-.5-.4-1.2 0-1.6l1.6-1.6c.4-.4 1.1-.4 1.6 0l5.5 5.5 5.5-5.5c.4-.4 1.1-.4 1.6 0l1.6 1.6c.4.4.4 1.1 0 1.6L32.2 22l5.5 5.5c.4.4.4 1.1 0 1.6l-1.6 1.6c-.4.4-1.1.4-1.6 0ZM88.5 30.7 83 25.2l-5.5 5.5c-.4.4-1.1.4-1.6 0l-1.6-1.6c-.4-.4-.4-1.1 0-1.6l5.5-5.5-5.5-5.5c-.4-.5-.4-1.2 0-1.6l1.6-1.6c.4-.4 1.1-.4 1.6 0l5.5 5.5 5.5-5.5c.4-.4 1.1-.4 1.6 0l1.6 1.6c.4.4.4 1.1 0 1.6L86.2 22l5.5 5.5c.4.4.4 1.1 0 1.6l-1.6 1.6c-.4.4-1.1.4-1.6 0Z" fill="#000" fill-opacity=".6"/>',
),
'eyebrows' => array(
'angryNatural' => '<path d="M44.1 17.12ZM19.27 5.01a7.16 7.16 0 0 0-6.42 2.43c-.6.73-1.56 2.48-1.51 3.42.02.35.22.37 1.12.59 1.65.39 4.5-1.12 6.36-.98 2.58.2 5.04 1.4 7.28 2.68 3.84 2.2 8.35 6.84 13.1 6.6.35-.02 5.41-1.74 4.4-2.72-.31-.49-3.03-1.13-3.5-1.36-2.17-1.09-4.37-2.45-6.44-3.72C29.14 9.18 24.72 5.6 19.28 5ZM68.03 17.12ZM92.91 5.01c2.36-.27 4.85.5 6.42 2.43.6.73 1.56 2.48 1.51 3.42-.02.35-.22.37-1.12.59-1.65.39-4.5-1.12-6.36-.98-2.58.2-5.04 1.4-7.28 2.68-3.84 2.2-8.35 6.84-13.1 6.6-.35-.02-5.41-1.74-4.4-2.72.31-.49 3.03-1.13 3.5-1.36 2.17-1.09 4.36-2.45 6.44-3.72C83.05 9.18 87.46 5.6 92.91 5Z" fill-rule="evenodd" clip-rule="evenodd" fill="#000" fill-opacity=".6"/>',
'defaultNatural' => '<path d="M26.55 6.15c-5.8.27-15.2 4.49-14.96 10.34.01.18.3.27.43.12 2.76-2.96 22.32-5.95 29.2-4.36.64.14 1.12-.48.72-.93-3.43-3.85-10.2-5.43-15.4-5.18ZM86.45 6.15c5.8.27 15.2 4.49 14.96 10.34-.01.18-.3.27-.43.12-2.76-2.96-22.32-5.95-29.2-4.36-.64.14-1.12-.48-.72-.93 3.43-3.85 10.2-5.43 15.4-5.18Z" fill-rule="evenodd" clip-rule="evenodd" fill="#000" fill-opacity=".6"/>',
'flatNatural' => '<path d="M38.66 11.1c-5 .35-9.92.08-14.92-.13-3.83-.16-7.72-.68-11.37 1.01-.7.32-4.53 2.28-4.44 3.35.07.85 3.93 2.2 4.63 2.44 3.67 1.29 7.18.9 10.95.66 4.64-.27 9.25-.07 13.87-.2 3.12-.1 7.92-.63 9.46-4.4.46-1.14.1-3.42-.36-4.66-.19-.5-.72-.69-1.13-.4a15.04 15.04 0 0 1-6.68 2.32ZM73.34 11.1c5 .35 9.92.08 14.92-.13 3.83-.16 7.72-.68 11.37 1.01.7.32 4.53 2.28 4.44 3.35-.07.85-3.93 2.2-4.63 2.44-3.67 1.29-7.18.9-10.95.66-4.63-.27-9.24-.07-13.86-.2-3.12-.1-7.92-.63-9.46-4.4-.46-1.14-.1-3.42.36-4.66.18-.5.72-.69 1.13-.4a15.04 15.04 0 0 0 6.68 2.32Z" fill-rule="evenodd" clip-rule="evenodd" fill="#000" fill-opacity=".6"/>',
'frownNatural' => '<path d="M36.37 6.88c-1.97 2.9-5.55 4.64-8.74 5.68-3.94 1.29-18.55 3.38-15.11 11.35.05.12.22.12.27 0 1.15-2.65 17.47-5.12 18.97-5.7 4.45-1.71 8.4-5.5 9.17-10.55.35-2.31-.64-6.05-1.55-7.55-.11-.18-.37-.13-.43.07-.36 1.33-1.41 4.97-2.58 6.7ZM75.63 6.88c1.97 2.9 5.55 4.64 8.74 5.68 3.94 1.29 18.55 3.38 15.11 11.35a.15.15 0 0 1-.27 0c-1.15-2.65-17.47-5.12-18.97-5.7-4.45-1.71-8.4-5.5-9.17-10.55-.35-2.31.64-6.05 1.55-7.55.11-.18.37-.13.43.07.36 1.33 1.41 4.97 2.58 6.7Z" fill-rule="evenodd" clip-rule="evenodd" fill="#000" fill-opacity=".6"/>',
'raisedExcitedNatural' => '<path d="m22.77 1.58.9-.4C28.93-.91 36.88-.03 41.73 2.3c.57.27.18 1.15-.4 1.1-14.92-1.14-24.96 8.15-28.37 14.45-.1.18-.41.2-.49.03-2.3-5.32 4.45-13.98 10.3-16.3ZM89.23 1.58l-.9-.4C83.07-.91 75.12-.03 70.27 2.3c-.57.27-.18 1.15.4 1.1 14.92-1.14 24.96 8.15 28.37 14.45.1.18.41.2.49.03 2.3-5.32-4.45-13.98-10.3-16.3Z" fill-rule="evenodd" clip-rule="evenodd" fill="#000" fill-opacity=".6"/>',
'sadConcernedNatural' => '<path d="m31.23 20.42-.9.4c-5.25 2.09-13.2 1.21-18.05-1.12-.57-.27-.18-1.15.4-1.1 14.92 1.14 24.96-8.15 28.37-14.45.1-.18.41-.2.49-.03 2.3 5.32-4.45 13.98-10.3 16.3ZM80.77 20.42l.9.4c5.25 2.09 13.2 1.21 18.05-1.12.57-.27.18-1.15-.4-1.1-14.92 1.14-24.96-8.15-28.37-14.45-.1-.18-.41-.2-.49-.03-2.3 5.32 4.45 13.98 10.3 16.3Z" fill-rule="evenodd" clip-rule="evenodd" fill="#000" fill-opacity=".6"/>',
'unibrowNatural' => '<g fill-rule="evenodd" clip-rule="evenodd" fill="#DADADA"><path d="M57 12.82ZM96.12 7.6c1.46.56 9.19 6.43 7.86 9.16a.8.8 0 0 1-1.29.22 10.63 10.63 0 0 0-1.7-1.19c-5.1-2.84-11.3-1.93-16.73-.91-6.12 1.14-12.11 3.48-18.39 2.67-2.04-.26-6.08-1.22-7.63-2.96-.47-.53-.06-1.38.64-1.43 1.44-.11 2.86-.86 4.33-1.28 3.65-1.03 7.4-1.56 11.11-2.29 6.62-1.3 15.17-4.53 21.8-2Z"/><path d="M58.76 12.76c-1.17.04-2.8 3.56-.56 3.68 2.23.11 1.73-3.72.56-3.68ZM55 12.8c0-.01 0-.01 0 0ZM15.88 7.56c-1.46.56-9.19 6.43-7.86 9.16.24.5.89.6 1.29.22.55-.52 1.58-1.11 1.71-1.18 5.1-2.84 11.3-1.93 16.73-.91 6.12 1.14 12.11 3.48 18.39 2.67 2.04-.26 6.08-1.22 7.63-2.96.47-.53.06-1.38-.64-1.43-1.44-.11-2.86-.86-4.33-1.28-3.65-1.03-7.4-1.56-11.11-2.29-6.62-1.3-15.17-4.53-21.8-2Z"/><path d="M54.97 11.79c1.17.04 2.77 4.5.53 4.67-2.24.18-1.7-4.71-.53-4.67Z"/></g>',
'upDownNatural' => '<path d="m22.77 1.58.9-.4C28.93-.91 36.88-.03 41.73 2.3c.57.27.18 1.15-.4 1.1-14.92-1.14-24.96 8.15-28.37 14.45-.1.18-.41.2-.49.03-2.3-5.32 4.45-13.98 10.3-16.3ZM87 12.07c5.75.77 14.74 5.8 13.99 11.6-.03.2-.31.26-.44.1-2.49-3.2-21.71-7.87-28.71-6.9-.64.1-1.07-.57-.63-.98 3.75-3.54 10.62-4.52 15.78-3.82Z" fill-rule="evenodd" clip-rule="evenodd" fill="#000" fill-opacity=".6"/>',
'angry' => '<path d="M15.61 15.18c4.24-5.76 6.88-5.48 13.31-.62l.67.5C34.41 18.73 36.7 20 40 20a2 2 0 1 0 0-4c-2.07 0-3.9-1.02-7.99-4.12l-.68-.52C27.57 8.53 25.37 7.3 22.63 7c-3.68-.4-7.05 1.48-10.24 5.83a2 2 0 1 0 3.22 2.36ZM96.39 15.18c-4.24-5.76-6.88-5.48-13.31-.62l-.67.5C77.58 18.73 75.29 20 72 20a2 2 0 1 1 0-4c2.07 0 3.9-1.02 7.99-4.12l.68-.52c3.76-2.83 5.96-4.07 8.7-4.37 3.68-.4 7.05 1.48 10.24 5.83a2 2 0 1 1-3.22 2.36Z" fill="#000" fill-opacity=".6"/>',
'default' => '<path d="M15.63 17.16c3.92-5.51 14.65-8.6 23.9-6.33a2 2 0 1 0 .95-3.88c-10.74-2.64-23.17.94-28.11 7.9a2 2 0 0 0 3.26 2.3ZM96.37 17.16c-3.91-5.51-14.65-8.6-23.9-6.33a2 2 0 1 1-.95-3.88c10.74-2.64 23.17.94 28.11 7.9a2 2 0 0 1-3.26 2.3Z" fill="#000" fill-opacity=".6"/>',
'raisedExcited' => '<path d="M15.98 17.13C17.48 7.6 30.06 1.1 39.16 5.3a2 2 0 1 0 1.68-3.63c-11.5-5.3-26.9 2.66-28.82 14.84a2 2 0 0 0 3.96.63ZM96.02 17.13C94.52 7.6 81.94 1.1 72.84 5.3a2 2 0 1 1-1.68-3.63c11.5-5.3 26.9 2.66 28.82 14.84a2 2 0 0 1-3.96.63Z" fill="#000" fill-opacity=".6"/>',
'sadConcerned' => '<path d="M38.03 5.6c-1.48 8.38-14.1 14.17-23.24 10.42a2.04 2.04 0 0 0-2.64 1c-.43.97.04 2.1 1.05 2.5 11.45 4.7 26.84-2.37 28.76-13.3a1.92 1.92 0 0 0-1.64-2.2 2 2 0 0 0-2.3 1.57ZM73.97 5.6c1.48 8.38 14.1 14.17 23.24 10.42 1.02-.41 2.2.03 2.63 1 .43.97-.04 2.1-1.05 2.5-11.44 4.7-26.84-2.37-28.76-13.3a1.92 1.92 0 0 1 1.64-2.2 2 2 0 0 1 2.3 1.57Z" fill="#000" fill-opacity=".6"/>',
'upDown' => '<path d="M15.6 14.16c4.49-6.32 14-9.5 23.75-6.36a2 2 0 1 0 1.23-3.81c-11.41-3.68-22.74.1-28.25 7.85a2 2 0 1 0 3.26 2.32ZM96.38 21.16c-3.92-5.51-14.65-8.6-23.9-6.33a2 2 0 0 1-.95-3.88c10.74-2.64 23.17.94 28.1 7.9a2 2 0 1 1-3.25 2.3Z" fill="#000" fill-opacity=".6"/>',
),
),
);
File diff suppressed because one or more lines are too long
+84
View File
@@ -0,0 +1,84 @@
<?php
return array(
'name' => 'bottts-neutral',
'meta' => array(
'title' => 'Bottts',
'creator' => 'Pablo Stanley',
'source' => 'https://bottts.com/',
'license_name' => 'Free for personal and commercial use',
'license_url' => 'https://bottts.com/',
),
'view_box' => '0 0 120 120',
'clip_default' => true,
'has_pre_create' => false,
'has_post_create' => false,
'is_initials' => false,
'attr_pairs' => array(
array('viewBox', '0 0 120 120'),
array('fill', 'none'),
array('shape-rendering', 'auto'),
),
'bg_colors' => array('ffb300', '1e88e5', '546e7a', '6d4c41', '00acc1', 'f4511e', '5e35b1', '43a047', '757575', '3949ab', '039be5', '7cb342', 'c0ca33', 'fb8c00', 'd81b60', '8e24aa', 'e53935', '00897b', 'fdd835'),
'bg_type' => array('solid'),
'bg_rotation' => array('0', '360'),
'body_template' => '<g transform="translate(22 68)">@@k:mouth@@</g><g transform="translate(8 20)">@@k:eyes@@</g>',
'pick_order' => array('mouth', 'eyes'),
'bool_order' => array(),
'color_order' => array(
),
'pc_has_ints' => false,
'pc_meta' => array(
array(
'group' => 'mouth',
'values_opt' => 'mouth',
'width' => 0,
'height' => 0,
'rotation' => array('opt' => null, 'fallback' => array('0')),
'offsetX' => array('opt' => null, 'fallback' => array('0')),
'offsetY' => array('opt' => null, 'fallback' => array('0')),
),
array(
'group' => 'eyes',
'values_opt' => 'eyes',
'width' => 0,
'height' => 0,
'rotation' => array('opt' => null, 'fallback' => array('0')),
'offsetX' => array('opt' => null, 'fallback' => array('0')),
'offsetY' => array('opt' => null, 'fallback' => array('0')),
),
),
'defaults' => array(
'backgroundColor' => array('ffb300', '1e88e5', '546e7a', '6d4c41', '00acc1', 'f4511e', '5e35b1', '43a047', '757575', '3949ab', '039be5', '7cb342', 'c0ca33', 'fb8c00', 'd81b60', '8e24aa', 'e53935', '00897b', 'fdd835'),
'eyes' => array('bulging', 'dizzy', 'eva', 'frame1', 'frame2', 'glow', 'happy', 'hearts', 'robocop', 'round', 'roundFrame01', 'roundFrame02', 'sensor', 'shade01'),
'mouth' => array('bite', 'diagram', 'grill01', 'grill02', 'grill03', 'smile01', 'smile02', 'square01', 'square02'),
),
'groups' => array(
'mouth' => array(
'bite' => '<rect x="4" y="5" width="68" height="22" rx="5" fill="#000" fill-opacity=".2"/><rect x="8" y="9" width="60" height="14" rx="2" fill="#000" fill-opacity=".6"/><path fill-rule="evenodd" clip-rule="evenodd" d="m20 17 6-8H14l6 8ZM32 17l6-8H26l6 8ZM44 17l6-8H38l6 8ZM56 17l6-8H50l6 8Z" fill="#E1E6E8"/>',
'diagram' => '<rect x="4" y="4" width="68" height="24" rx="5" fill="#000" fill-opacity=".2"/><rect x="8" y="8" width="60" height="16" rx="2" fill="#000" fill-opacity=".8"/><path d="M9 17h11l2-4 3 7 4-8 2 9 3-11 3 10 3-3h15l3-4 2 7 3-3h4" stroke="#4EFAC9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>',
'grill01' => '<g fill="#000" fill-opacity=".6"><rect x="12" y="12" width="4" height="8" rx="2"/><rect x="36" y="12" width="4" height="8" rx="2"/><rect x="24" y="12" width="4" height="8" rx="2"/><rect x="48" y="12" width="4" height="8" rx="2"/><rect x="60" y="12" width="4" height="8" rx="2"/></g>',
'grill02' => '<g fill="#000" fill-opacity=".6"><rect x="28" y="10" width="6" height="14" rx="2"/><rect x="14" y="10" width="6" height="14" rx="2"/><rect x="42" y="10" width="6" height="14" rx="2"/><rect x="56" y="10" width="6" height="14" rx="2"/></g>',
'grill03' => '<rect x="4" y="5" width="68" height="22" rx="5" fill="#000" fill-opacity=".2"/><rect x="8" y="9" width="60" height="14" rx="2" fill="#fff"/><path fill="#000" fill-opacity=".1" d="M18 9h4v14h-4zM42 9h4v14h-4zM30 9h4v14h-4zM54 9h4v14h-4z"/>',
'smile01' => '<path d="M27.05 8.44a2 2 0 1 1 3.9-.88C31.72 10.96 34.4 13 38 13c3.6 0 6.28-2.04 7.05-5.44a2 2 0 1 1 3.9.88C47.75 13.7 43.43 17 38 17s-9.76-3.3-10.95-8.56Z" fill="#000" fill-opacity=".6"/>',
'smile02' => '<path fill-rule="evenodd" clip-rule="evenodd" d="M18 10.22C18 21.78 24.47 28 38 28c13.52 0 20-6.34 20-17.78C58 9.5 57.17 8 55 8H21c-2.05 0-3 1.38-3 2.22Z" fill="#000" fill-opacity=".8"/><mask id="mouthSmile02-a" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="18" y="8" width="40" height="20"><path fill-rule="evenodd" clip-rule="evenodd" d="M18 10.22C18 21.78 24.47 28 38 28c13.52 0 20-6.34 20-17.78C58 9.5 57.17 8 55 8H21c-2.05 0-3 1.38-3 2.22Z" fill="#fff"/></mask><g mask="url(#mouthSmile02-a)"><rect x="30" y="2" width="16" height="14" rx="2" fill="#fff"/></g>',
'square01' => '<rect x="24" y="6" width="27" height="8" rx="4" fill="#000" fill-opacity=".8"/>',
'square02' => '<rect x="16" y="8" width="44" height="4" rx="2" fill="#000" fill-opacity=".8"/>',
),
'eyes' => array(
'bulging' => '<circle cx="28" cy="24" r="18" fill="#000" fill-opacity=".2"/><circle cx="74" cy="24" r="18" fill="#000" fill-opacity=".2"/><circle cx="28" cy="24" r="15" fill="#F1EEDA"/><circle cx="74" cy="24" r="15" fill="#F1EEDA"/><rect x="26" y="15" width="10" height="10" rx="2" fill="#000" fill-opacity=".8"/><rect x="74" y="15" width="10" height="10" rx="2" fill="#000" fill-opacity=".8"/>',
'dizzy' => '<path d="m25 27.2 5.5 5.5c.5.4 1.2.4 1.6 0l1.6-1.6c.4-.5.4-1.2 0-1.6L28.2 24l5.5-5.5c.4-.5.4-1.2 0-1.6l-1.6-1.6c-.5-.4-1.2-.4-1.6 0L25 20.8l-5.5-5.5c-.5-.4-1.2-.4-1.6 0l-1.6 1.6c-.4.4-.4 1.1 0 1.6l5.5 5.5-5.5 5.5c-.4.5-.4 1.2 0 1.6l1.6 1.6c.5.4 1.2.4 1.6 0l5.5-5.5ZM79 27.2l5.5 5.5c.5.4 1.2.4 1.6 0l1.6-1.6c.4-.5.4-1.2 0-1.6L82.2 24l5.5-5.5c.4-.5.4-1.2 0-1.6l-1.6-1.6c-.5-.4-1.2-.4-1.6 0L79 20.8l-5.5-5.5c-.5-.4-1.2-.4-1.6 0l-1.6 1.6c-.4.4-.4 1.1 0 1.6l5.5 5.5-5.5 5.5c-.4.5-.4 1.2 0 1.6l1.6 1.6c.5.4 1.2.4 1.6 0l5.5-5.5Z" fill="#000" fill-opacity=".8"/>',
'eva' => '<g fill-rule="evenodd" clip-rule="evenodd"><path d="M53 0c34.75 0 49 17.47 49 31 0 13.53-19.59 17-49 17-29.05 0-51-3.47-51-17S17.11 0 53 0Z" fill="#000" fill-opacity=".8"/><path d="M28.82 34.65c-6.53-1.35-11.24-6.34-10.52-11.14.72-4.79 6.6-7.58 13.12-6.23 6.53 1.36 11.24 6.35 10.52 11.15-.72 4.8-6.6 7.59-13.12 6.23ZM75.42 34.65c-6.52 1.36-12.4-1.43-13.12-6.23-.72-4.8 4-9.8 10.52-11.15 6.52-1.35 12.4 1.44 13.12 6.24.72 4.81-4 9.8-10.52 11.15Z" fill="#25A6F5"/></g>',
'frame1' => '<rect y="4" width="104" height="42" rx="4" fill="#000" fill-opacity=".8"/><rect x="28" y="25" width="10" height="11" rx="2" fill="#8BDDFF"/><rect x="66" y="25" width="10" height="11" rx="2" fill="#8BDDFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M21 4h8L12 46H4L21 4Z" fill="#fff" fill-opacity=".4"/>',
'frame2' => '<rect x="8" y="10" width="88" height="36" rx="4" fill="#000" fill-opacity=".8"/><rect x="28" y="21" width="10" height="17" rx="2" fill="#5EF2B8"/><rect x="66" y="21" width="10" height="17" rx="2" fill="#5EF2B8"/><path fill-rule="evenodd" clip-rule="evenodd" d="M83 10h5L76 46h-5l12-36Z" fill="#fff" fill-opacity=".4"/>',
'glow' => '<g fill="#fff"><circle cx="21" cy="30" r="15" fill-opacity=".1"/><circle cx="83" cy="30" r="15" fill-opacity=".1"/><circle cx="21" cy="30" r="12" fill-opacity=".1"/><circle cx="83" cy="30" r="12" fill-opacity=".1"/><circle cx="21" cy="30" r="6" fill-opacity=".8"/><circle cx="83" cy="30" r="6" fill-opacity=".8"/><circle cx="21" cy="30" r="3" fill-opacity=".8"/><circle cx="83" cy="30" r="3" fill-opacity=".8"/></g>',
'happy' => '<path d="m18 19 12-2M20 31c0-3.31 2.9-6 7-6 3.1 0 6 2.69 6 6M86 20l-12-3M84 31c0-3.31-2.9-6-6-6-4.1 0-7 2.69-7 6" stroke="#000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>',
'hearts' => '<path d="M29.27 9.68c-2.55.13-4.96 2.24-6.25 4.15-1.48-1.76-4.1-3.6-6.65-3.47-5.48.28-8.85 3.8-8.63 8.1.3 5.72 4.88 8.89 9.7 12.24 1.71 1.15 5 4.15 5.42 4.82.42.67 2.14.6 2.58-.13a37.8 37.8 0 0 1 4.9-5.36c4.43-3.84 8.66-7.47 8.36-13.2-.23-4.3-3.95-7.44-9.43-7.15ZM87.63 10.36c-2.55-.14-5.17 1.7-6.65 3.47-1.3-1.9-3.7-4.02-6.25-4.15-5.48-.29-9.2 2.86-9.43 7.16-.3 5.72 3.93 9.35 8.36 13.19 1.6 1.32 4.55 4.64 4.9 5.36.35.7 2.06.82 2.58.13.51-.7 3.7-3.67 5.42-4.82 4.81-3.35 9.4-6.52 9.7-12.24.22-4.3-3.15-7.82-8.63-8.1Z" fill="#FF5353" fill-opacity=".8"/>',
'robocop' => '<rect x="7" y="16" width="91" height="16" rx="4" fill="#000" fill-opacity=".8"/><mask id="eyesRobocop-a" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="7" y="16" width="91" height="16"><rect x="7" y="16" width="91" height="16" rx="4" fill="#fff"/></mask><g mask="url(#eyesRobocop-a)" fill-rule="evenodd" clip-rule="evenodd" fill="#fff" fill-opacity=".8"><path d="M76 7h18L82 37H64L76 7ZM52 7h9L49 37h-9L52 7Z"/></g>',
'round' => '<g fill="#fff"><circle cx="24" cy="30" r="6"/><circle cx="80" cy="30" r="6"/></g>',
'roundFrame01' => '<rect y="12" width="104" height="32" rx="16" fill="#000" fill-opacity=".8"/><rect x="24" y="22" width="10" height="12" rx="2" fill="#F4F4F4"/><rect x="70" y="22" width="10" height="12" rx="2" fill="#F4F4F4"/>',
'roundFrame02' => '<rect y="11" width="104" height="34" rx="17" fill="#000" fill-opacity=".8"/><circle cx="29" cy="28" r="13" fill="#F1EEDA"/><circle cx="75" cy="28" r="13" fill="#F1EEDA"/><rect x="24" y="23" width="10" height="10" rx="2" fill="#000" fill-opacity=".8"/><rect x="70" y="23" width="10" height="10" rx="2" fill="#000" fill-opacity=".8"/>',
'sensor' => '<path d="M28 44a20 20 0 0 0 19.9-18h41.52a5 5 0 1 0 0-4H47.9A20 20 0 1 0 28 44Z" fill="#000" fill-opacity=".2"/><circle cx="94" cy="24" r="2" fill="#fff"/><circle cx="28" cy="24" r="16" fill="#000" fill-opacity=".6"/><circle cx="34" cy="16" r="3" fill="#fff"/>',
'shade01' => '<path d="M96 2H8c-4.5 0-8 3.5-8 8.03V28c0 4.5 3.5 8 8 8h13c8 0 11 8 18 8h27c7 0 9-8 17-8h13c4.5 0 8-3.5 8-8V10c0-4.5-3.5-8-8-8Z" fill="#000" fill-opacity=".8"/><path d="M87 14H17c-3.5 0-5 3-5 5v2c0 2 1.5 5 5 5h12c6 0 11.62 8 17 8h14c5.38 0 9-8 15-8h12c3.5 0 5-3 5-5v-2c0-2-1.5-5-5-5Z" fill="#FF3D3D"/><path d="M22.44 36.09 37.26 2h11L31.4 40.78l-.76-.58c-2.38-1.82-4.83-3.69-8.2-4.11ZM11.48 36 26.26 2h4L15.48 36h-4Z" fill="#fff" fill-opacity=".2"/>',
),
),
);
+67 -9
View File
@@ -12,11 +12,16 @@
*
* ── 素材与算法来源 ────────────────────────────────────────────────
* 算法与图形素材来自 DiceBear(https://www.dicebear.com)9.x。
* 收录的 14 套风格全部是 CC0 1.0 或 MIT 许可,可自由使用与商用:
* 收录的 18 套风格全部可自由使用与商用,且**都不要求署名**:
* CC0 1.0:glass identicon initials lorelei lorelei-neutral
* notionists notionists-neutral open-peeps pixel-art
* pixel-art-neutral rings shapes thumbs
* MIT :icons
* 作者自定义许可(Free for personal and commercial use,不要求署名):
* avataaars avataaars-neutral bottts bottts-neutral
* 设计者 Pablo Stanley,来源 avataaars.com / bottts.com。
* 这四套在 npm 包里写的是「See LICENSE file」,必须点进去看才知道
* 条款 —— 别把「措辞不明」当成「不能商用」,实际比 CC BY 还宽松。
* 每套模板都是把 DiceBear 的风格包「编译」成纯数组后的产物
* (inc/avatar-styles/*.php),文件里没有任何可执行 JS。
*
@@ -534,6 +539,22 @@ function yang_avatar_styles()
'label' => __('首字母', 'kratos'),
'desc' => __('显示邮箱对应的首字母文字。若访客用中文邮箱会显示拼音首字母。', 'kratos'),
),
'avataaars' => array(
'label' => __('美式卡通', 'kratos'),
'desc' => __('美式插画风,表情与发型最丰富的一套。不画背景,头像直接压在页面上。', 'kratos'),
),
'avataaars-neutral' => array(
'label' => __('美式卡通(带底色)', 'kratos'),
'desc' => __('同一套画风,带一块背景色,更醒目一点。', 'kratos'),
),
'bottts' => array(
'label' => __('机器人', 'kratos'),
'desc' => __('机器脑袋,靠零件与配色区分,没有人脸所以不会"崩脸"。不画背景。', 'kratos'),
),
'bottts-neutral' => array(
'label' => __('机器人(带底色)', 'kratos'),
'desc' => __('同一套机器人画风,带背景色块。', 'kratos'),
),
);
}
@@ -572,7 +593,7 @@ function yang_avatar_style()
/**
* 加载某套风格的编译后模板
*
* 只 require 用到的那一份,其余不解析 —— 14 套全量 1.1MB,
* 只 require 用到的那一份,其余不解析 —— 18 套全量 1.2MB,
* 每次请求都加载是不必要的开销。
*
* @param string $style
@@ -1029,11 +1050,13 @@ function yang_avatar_render($style, $seed, $size = 96, $palette = array())
$colors[$ck] = yang_avatar_color($p->pick($vals, 'transparent'));
}
/* ── 3. onPostCreate(会改 colors / options.backgroundColor) ── */
/* ── 3. onPostCreate(会改 colors / options.backgroundColor / 组件开关) ──
必须把 $picked 传进去:官方这里读的是 components.style.name 与 components.top.name。 */
if (!empty($style['has_post_create'])) {
$res = yang_avatar_post_create($style['name'], $d, $colors, $on);
$res = yang_avatar_post_create($style['name'], $d, $colors, $on, $picked);
$d = $res[0];
$colors = $res[1];
$on = $res[2];
}
/* ── 4. 展开 body ── */
@@ -1136,7 +1159,7 @@ function yang_avatar_int_range($p, $spec, $d)
* onPreCreate:按风格名精确复刻
*
* 这些是**代码**(会动态改 options),不能当数据编译。
* 收录的 14 套里只有 shapes 有,且它会消耗 3 次 pick。
* 收录的 18 套里只有 shapes 有,且它会消耗 3 次 pick。
*
* @param string $name
* @param Yang_Avatar_Prng $p
@@ -1184,11 +1207,46 @@ function yang_avatar_pre_create($name, $p, $d)
* @param array $d
* @param array $colors
* @param array $on
* @return array array($d, $colors)
* @param array $picked getComponents 已抽到的组件名(官方 onPostCreate 读的是
* components.style.name / components.top.name,必须传进来)
* @return array array($d, $colors, $on)
*/
function yang_avatar_post_create($name, $d, $colors, $on)
function yang_avatar_post_create($name, $d, $colors, $on, $picked = array())
{
if ($name === 'lorelei' || $name === 'lorelei-neutral') {
if ($name === 'avataaars') {
/* 官方 onPostCreate 的三条,逐条复刻(顺序也要一样):
① style 组取到 'circle' ⇒ 背景整个清空;
② style 不是 'circle'、但背景**恰好只有 65c9ff 这一项** ⇒ 也清空。
65c9ff 是这款的默认背景色,意思是「用户没主动选过背景」,
留着会在脸后面糊一块天蓝,看着像没去底。
⚠️ 注意这里判的是「只有一个、且等于 65c9ff」,不是「包含 65c9ff」:
若用户给了多个颜色,就说明是主动选的,要留着。
③ 戴头巾(top = hijab)且没强制 100% 胡子 ⇒ 去掉胡子
(头巾配胡子现实中不存在)。
清空 backgroundColor 不是「不画背景」那么简单:下游
yang_avatar_bg_colors() 对空数组会走 shuffle + next() 消耗 PRNG,
与官方 getBackgroundColors() 的空数组分支步数一致 —— 两边都恰好消耗一次。 */
$styleName = isset($picked['style']) ? $picked['style'] : '';
if ($styleName === 'circle') {
$d['backgroundColor'] = array();
} elseif (isset($d['backgroundColor']) && is_array($d['backgroundColor'])
&& count($d['backgroundColor']) === 1
&& $d['backgroundColor'][0] === '65c9ff') {
$d['backgroundColor'] = array();
}
// ③ 头巾与胡子互斥
if (!empty($on['top'])) {
$topName = isset($picked['top']) ? $picked['top'] : '';
$prob = isset($d['facialHairProbability']) ? $d['facialHairProbability'] : 10;
if ((int) $prob !== 100 && $topName === 'hijab') {
// 官方置 undefined ⇒ 展开时该组不出现;这里同步关掉 bool,避免取到残留值
$d['facialHair'] = array();
$on['facialHair'] = false;
}
}
} elseif ($name === 'lorelei' || $name === 'lorelei-neutral') {
// 有胡子且胡子与嘴同色时,把嘴改成白色,否则看不出嘴
if (!empty($on['beard']) && isset($colors['hair'], $colors['mouth'])
&& $colors['hair'] === $colors['mouth']) {
@@ -1229,7 +1287,7 @@ function yang_avatar_post_create($name, $d, $colors, $on)
}
}
}
return array($d, $colors);
return array($d, $colors, $on);
}
/**
+1 -1
View File
@@ -288,7 +288,7 @@ function kratos_options()
$options[] = array(
'name' => __('头像风格', 'kratos'),
'desc' => __('勾选上面的「启用自动头像」后,这里才会出现风格列表。所有风格都是 CC0 或 MIT 许可,可自由使用与商用。点一下即时预览,保存后生效。', 'kratos'),
'desc' => __('勾选上面的「启用自动头像」后,这里才会出现风格列表。所有风格都可自由使用与商用,且不要求署名。点一下即时预览,保存后生效。', 'kratos'),
'std' => 'lorelei',
'id' => 'a_auto_style',
'type' => 'avatar_style',
+1 -1
View File
@@ -1,7 +1,7 @@
/*
Theme Name: Kratos_Yang
Text Domain: kratos_Yang
Version: 3.2.37
Version: 3.2.38
Requires PHP: 7.0
Description: 这是一个Kratos主题的分支版本,用来增加一些定制化功能。
Tags: 博客, 双栏, 响应式, 自定义背景, 自定义颜色, 自定义图标, 自定义菜单, 特色图像, 收录优化, 邮件中心, 主题选项, 小工具, 文章置顶, 无障碍友好