3.2.36 新增「自动头像」:按邮箱本地生成,14 套 CC0/MIT 风格可选 #5
为没有头像的访客按邮箱确定性地生成一张 SVG 头像,替代 Gravatar 那个灰底"神秘人"(cn.gravatar.com 在国内已超时,不勾加速时头像 干脆是空白)。全程纯 PHP,零外网请求、零落盘。 后台「主题设置」新增「自动头像」复选框 + 风格列表:勾上之后才 出现 14 套风格,点一下即时换 16 格预览,保存后全站生效。 实现要点(都是踩出来的): - PRNG 必须与 DiceBear 9.x 逐位一致:xorshift + hashSeed 全程跑在 JS 的 int32 语义里,PHP 64 位整数要逐步 i32() 归一; charCodeAt 按 UTF-16 码元取值,emoji 必须真做代理对拆分。 - pickComponent 有简繁两版:只有 glass/rings/shapes/thumbs 额外取 三次整数(rotation/offsetX/offsetY)。给简版也补三次 ⇒ PRNG 多走 3N 步 ⇒ 31 套里 27 套全错。编译期算 pc_has_ints 才治得住。 - 自带人类调色板:官方默认配色几乎全单值,30 个邮箱只出 2 种配色, 那才是"默认头像丑"的真因,光换画风解决不了。 - 只收录 CC0/MIT(13 CC0 + 1 MIT),CC BY 那 13 套要求署名,一律不收—— 主题装给用户用,用户不会维护署名,收进来等于转嫁合规义务。 接入 get_avatar 的两个关键修正: - 必须先看原 src 是不是 Gravatar 家族域名再决定是否替换。原先无条件 替换会把媒体库头像、外链头像、别的插件处理过的 data: 头像一起盖掉。 - 必须删 srcset。只改 src 留着 srcset,浏览器优先用 srcset, 生成的图根本不会被加载(现象是"代码明明换了,页面还是老样子"), 且不能重建 <img> 标签(会丢掉评论头像 CSS 依赖的 class)。 后台三处必须这么做: - body class 由 PHP 输出(admin_body_class),否则每次进设置页/保存后 重载都会先显示风格列表再藏起来,闪一下。 - 事件监听 radio 的 change,不能监听 label 的 click —— label 会把 click 转发给关联 input,冒泡回来再触发一次 ⇒ 同一风格发两次请求 (实测 hits 2→4)。 - 首屏已渲染的 16 格写进 JS 缓存,否则点一圈回到默认风格会白请求一次。 不依赖任何可选扩展:不用 mbstring(未安装时 mb_substr 是 Fatal error, 整站白屏)、不用 gd/imagick。UTF-8 切分/截断/大写全部自己实现。 PHP 7.0 语法,PHP 8.5 下 E_ALL 无任何 warning。 验证: - 14 套 × 6 种子 = 84 个用例与 DiceBear 官方 Node 输出逐字节一致, PHP 8.4 / 8.5 / 无 mbstring(php -n)三种环境均 84/0。 - 静态守卫 55/0;反向验证 17 项注入全部被捕获。 - 后台面板浏览器验证 26/0(显隐、几何、点选、缓存、连点、零报错)。 - 包内内容契约 24/0;包校验反向验证 6 项注入全部被捕获。 - 单次渲染稳态 0.047~0.105ms,峰值内存 2~4MB。
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
<?php
|
||||
return array(
|
||||
'name' => 'thumbs',
|
||||
'meta' => array(
|
||||
'title' => 'Thumbs',
|
||||
'creator' => 'DiceBear',
|
||||
'source' => 'https://www.dicebear.com',
|
||||
'license_name' => 'CC0 1.0',
|
||||
'license_url' => 'https://creativecommons.org/publicdomain/zero/1.0/',
|
||||
),
|
||||
'view_box' => '0 0 100 100',
|
||||
'clip_default' => true,
|
||||
'has_pre_create' => false,
|
||||
'has_post_create' => true,
|
||||
'is_initials' => false,
|
||||
'attr_pairs' => array(
|
||||
array('viewBox', '0 0 100 100'),
|
||||
array('fill', 'none'),
|
||||
array('shape-rendering', 'auto'),
|
||||
),
|
||||
'bg_colors' => array('0a5b83', '1c799f', '69d2e7', 'f1f4dc', 'f88c49'),
|
||||
'bg_type' => array('solid'),
|
||||
'bg_rotation' => array('0', '360'),
|
||||
'body_template' => '@@k:shape@@',
|
||||
'pick_order' => array('shape', 'face', 'eyes', 'mouth'),
|
||||
'bool_order' => array(),
|
||||
'color_order' => array(
|
||||
'shape' => 'shapeColor',
|
||||
'mouth' => 'mouthColor',
|
||||
'eyes' => 'eyesColor',
|
||||
),
|
||||
'pc_has_ints' => true,
|
||||
'pc_meta' => array(
|
||||
array(
|
||||
'group' => 'shape',
|
||||
'values_opt' => 'shape',
|
||||
'width' => 100,
|
||||
'height' => 140,
|
||||
'rotation' => array('opt' => 'shapeRotation', 'fallback' => array('0')),
|
||||
'offsetX' => array('opt' => 'shapeOffsetX', 'fallback' => array('0')),
|
||||
'offsetY' => array('opt' => 'shapeOffsetY', 'fallback' => array('0')),
|
||||
),
|
||||
array(
|
||||
'group' => 'face',
|
||||
'values_opt' => 'face',
|
||||
'width' => 42,
|
||||
'height' => 42,
|
||||
'rotation' => array('opt' => 'faceRotation', 'fallback' => array('0')),
|
||||
'offsetX' => array('opt' => 'faceOffsetX', 'fallback' => array('0')),
|
||||
'offsetY' => array('opt' => 'faceOffsetY', 'fallback' => array('0')),
|
||||
),
|
||||
array(
|
||||
'group' => 'eyes',
|
||||
'values_opt' => 'eyes',
|
||||
'width' => 42,
|
||||
'height' => 16,
|
||||
'rotation' => array('opt' => null, 'fallback' => array('0')),
|
||||
'offsetX' => array('opt' => null, 'fallback' => array('0')),
|
||||
'offsetY' => array('opt' => null, 'fallback' => array('0')),
|
||||
),
|
||||
array(
|
||||
'group' => 'mouth',
|
||||
'values_opt' => 'mouth',
|
||||
'width' => 30,
|
||||
'height' => 14,
|
||||
'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('0a5b83', '1c799f', '69d2e7', 'f1f4dc', 'f88c49'),
|
||||
'eyes' => array('variant1W10', 'variant1W12', 'variant1W14', 'variant1W16', 'variant2W10', 'variant2W12', 'variant2W14', 'variant2W16', 'variant3W10', 'variant3W12', 'variant3W14', 'variant3W16', 'variant4W10', 'variant4W12', 'variant4W14', 'variant4W16', 'variant5W10', 'variant5W12', 'variant5W14', 'variant5W16', 'variant6W10', 'variant6W12', 'variant6W14', 'variant6W16', 'variant7W10', 'variant7W12', 'variant7W14', 'variant7W16', 'variant8W10', 'variant8W12', 'variant8W14', 'variant8W16', 'variant9W10', 'variant9W12', 'variant9W14', 'variant9W16'),
|
||||
'eyesColor' => array('000000', 'ffffff'),
|
||||
'face' => array('variant1', 'variant2', 'variant3', 'variant5', 'variant4'),
|
||||
'faceOffsetX' => array('-15', '15'),
|
||||
'faceOffsetY' => array('-15', '15'),
|
||||
'faceRotation' => array('-20', '20'),
|
||||
'mouth' => array('variant2', 'variant1', 'variant3', 'variant4', 'variant5'),
|
||||
'mouthColor' => array('000000', 'ffffff'),
|
||||
'shape' => array('default'),
|
||||
'shapeColor' => array('0a5b83', '1c799f', '69d2e7', 'f1f4dc', 'f88c49'),
|
||||
'shapeOffsetX' => array('-5', '5'),
|
||||
'shapeOffsetY' => array('-5', '5'),
|
||||
'shapeRotation' => array('-20', '20'),
|
||||
),
|
||||
'groups' => array(
|
||||
'shape' => array(
|
||||
'default' => '<path d="M95 53.33C95 29.4 74.85 10 50 10S5 29.4 5 53.33V140h90V53.33Z" fill="@@c:shape@@"/><g transform="translate(29 33)">@@k:face@@</g>',
|
||||
),
|
||||
'face' => array(
|
||||
'variant1' => '<g transform="translate(0 5)">@@k:eyes@@</g><g transform="translate(6 23)">@@k:mouth@@</g>',
|
||||
'variant2' => '<g transform="translate(0 4)">@@k:eyes@@</g><g transform="translate(6 24)">@@k:mouth@@</g>',
|
||||
'variant3' => '<g transform="translate(0 3)">@@k:eyes@@</g><g transform="translate(6 25)">@@k:mouth@@</g>',
|
||||
'variant5' => '<g transform="translate(0 1)">@@k:eyes@@</g><g transform="translate(6 27)">@@k:mouth@@</g>',
|
||||
'variant4' => '<g transform="translate(0 2)">@@k:eyes@@</g><g transform="translate(6 26)">@@k:mouth@@</g>',
|
||||
),
|
||||
'eyes' => array(
|
||||
'variant1W10' => '<path d="M.25 8.12C1.66 11.86 12 16 12 16s5.17-9.58 3.76-13.32c0 0-1.41-3.74-5.3-2.38-3.87 1.36-2.7 4.48-2.7 4.48S6.6 1.66 2.73 3.02C-1.16 4.38.25 8.12.25 8.12ZM26.24 2.68C24.84 6.42 30 16 30 16s10.34-4.14 11.75-7.88c0 0 1.41-3.74-2.47-5.1-3.87-1.36-5.05 1.76-5.05 1.76s1.18-3.12-2.7-4.48c-3.88-1.36-5.29 2.38-5.29 2.38Z" fill="@@c:eyes@@"/>',
|
||||
'variant1W12' => '<path d="M-.75 8.12C.66 11.86 11 16 11 16s5.17-9.58 3.76-13.32c0 0-1.41-3.74-5.3-2.38-3.87 1.36-2.7 4.48-2.7 4.48S5.6 1.66 1.73 3.02c-3.88 1.36-2.47 5.1-2.47 5.1ZM27.24 2.68C25.84 6.42 31 16 31 16s10.34-4.14 11.75-7.88c0 0 1.41-3.74-2.47-5.1-3.87-1.36-5.05 1.76-5.05 1.76s1.18-3.12-2.7-4.48c-3.88-1.36-5.29 2.38-5.29 2.38Z" fill="@@c:eyes@@"/>',
|
||||
'variant1W14' => '<path d="M-1.75 8.12C-.34 11.86 10 16 10 16s5.17-9.58 3.76-13.32c0 0-1.41-3.74-5.3-2.38-3.87 1.36-2.7 4.48-2.7 4.48S4.6 1.66.73 3.02c-3.88 1.36-2.47 5.1-2.47 5.1ZM28.24 2.68C26.84 6.42 32 16 32 16s10.34-4.14 11.75-7.88c0 0 1.41-3.74-2.47-5.1-3.87-1.36-5.05 1.76-5.05 1.76s1.18-3.12-2.7-4.48c-3.88-1.36-5.29 2.38-5.29 2.38Z" fill="@@c:eyes@@"/>',
|
||||
'variant1W16' => '<path d="M-2.75 8.12C-1.34 11.86 9 16 9 16s5.17-9.58 3.76-13.32c0 0-1.41-3.74-5.3-2.38-3.87 1.36-2.7 4.48-2.7 4.48S3.6 1.66-.27 3.02c-3.88 1.36-2.47 5.1-2.47 5.1ZM29.24 2.68C27.84 6.42 33 16 33 16s10.34-4.14 11.75-7.88c0 0 1.41-3.74-2.47-5.1-3.87-1.36-5.05 1.76-5.05 1.76s1.18-3.12-2.7-4.48c-3.88-1.36-5.29 2.38-5.29 2.38Z" fill="@@c:eyes@@"/>',
|
||||
'variant2W10' => '<path d="M9.5 10c-3.88 0-7.11-4.23-6.4-4.85.71-.62 2.63 1.3 6.4 1.3 3.77 0 5.69-2 6.4-1.3S13.38 10 9.5 10ZM32.5 10c-3.88 0-7.11-4.23-6.4-4.85.71-.62 2.63 1.3 6.4 1.3 3.77 0 5.69-2 6.4-1.3S36.38 10 32.5 10Z" fill="@@c:eyes@@"/>',
|
||||
'variant2W12' => '<path d="M8.5 10c-3.88 0-7.11-4.23-6.4-4.85.71-.62 2.63 1.3 6.4 1.3 3.77 0 5.69-2 6.4-1.3S12.38 10 8.5 10ZM33.5 10c-3.88 0-7.11-4.23-6.4-4.85.71-.62 2.63 1.3 6.4 1.3 3.77 0 5.69-2 6.4-1.3S37.38 10 33.5 10Z" fill="@@c:eyes@@"/>',
|
||||
'variant2W14' => '<path d="M7.5 10C3.62 10 .39 5.77 1.1 5.15c.71-.62 2.63 1.3 6.4 1.3 3.77 0 5.69-2 6.4-1.3S11.38 10 7.5 10ZM34.5 10c-3.88 0-7.11-4.23-6.4-4.85.71-.62 2.63 1.3 6.4 1.3 3.77 0 5.69-2 6.4-1.3S38.38 10 34.5 10Z" fill="@@c:eyes@@"/>',
|
||||
'variant2W16' => '<path d="M6.5 10C2.62 10-.61 5.77.1 5.15c.71-.62 2.63 1.3 6.4 1.3 3.77 0 5.69-2 6.4-1.3S10.38 10 6.5 10ZM35.5 10c-3.88 0-7.11-4.23-6.4-4.85.71-.62 2.63 1.3 6.4 1.3 3.77 0 5.69-2 6.4-1.3S39.38 10 35.5 10Z" fill="@@c:eyes@@"/>',
|
||||
'variant3W10' => '<path d="M11.86 7.5c0-1.42-4.14-2.85-4.82-4.98C6.34.4 16 5.37 16 7.5c0 2.13-9.65 7.11-8.96 4.98.68-2.13 4.82-3.56 4.82-4.98ZM30.14 7.5c0-1.42 4.14-2.85 4.82-4.98C35.66.4 26 5.37 26 7.5c0 2.13 9.65 7.11 8.96 4.98-.68-2.13-4.82-3.56-4.82-4.98Z" fill="@@c:eyes@@"/>',
|
||||
'variant3W12' => '<path d="M10.86 7.5c0-1.42-4.14-2.85-4.82-4.98C5.34.4 15 5.37 15 7.5c0 2.13-9.65 7.11-8.96 4.98.68-2.13 4.82-3.56 4.82-4.98ZM31.14 7.5c0-1.42 4.14-2.85 4.82-4.98C36.66.4 27 5.37 27 7.5c0 2.13 9.65 7.11 8.96 4.98-.68-2.13-4.82-3.56-4.82-4.98Z" fill="@@c:eyes@@"/>',
|
||||
'variant3W14' => '<path d="M9.86 7.5c0-1.42-4.14-2.85-4.82-4.98C4.34.4 14 5.37 14 7.5c0 2.13-9.65 7.11-8.96 4.98.68-2.13 4.82-3.56 4.82-4.98ZM32.14 7.5c0-1.42 4.14-2.85 4.82-4.98C37.66.4 28 5.37 28 7.5c0 2.13 9.65 7.11 8.96 4.98-.68-2.13-4.82-3.56-4.82-4.98Z" fill="@@c:eyes@@"/>',
|
||||
'variant3W16' => '<path d="M8.86 7.5c0-1.42-4.14-2.85-4.82-4.98C3.34.4 13 5.37 13 7.5c0 2.13-9.65 7.11-8.96 4.98.68-2.13 4.82-3.56 4.82-4.98ZM33.14 7.5c0-1.42 4.14-2.85 4.82-4.98C38.66.4 29 5.37 29 7.5c0 2.13 9.65 7.11 8.96 4.98-.68-2.13-4.82-3.56-4.82-4.98Z" fill="@@c:eyes@@"/>',
|
||||
'variant4W10' => '<path d="M8 8.36S8 4 12 4s4 4.36 4 4.36v2.91s0 .73-.67.73c-.66 0-.66-2.9-3.33-2.9S9.33 12 8.67 12C8 12 8 11.27 8 11.27v-2.9ZM26 8.36S26 4 30 4s4 4.36 4 4.36v2.91s0 .73-.67.73c-.66 0-.66-2.9-3.33-2.9S27.33 12 26.67 12c-.67 0-.67-.73-.67-.73v-2.9Z" fill="@@c:eyes@@"/>',
|
||||
'variant4W12' => '<path d="M7 8.36S7 4 11 4s4 4.36 4 4.36v2.91s0 .73-.67.73c-.66 0-.66-2.9-3.33-2.9S8.33 12 7.67 12C7 12 7 11.27 7 11.27v-2.9ZM27 8.36S27 4 31 4s4 4.36 4 4.36v2.91s0 .73-.67.73c-.66 0-.66-2.9-3.33-2.9S28.33 12 27.67 12c-.67 0-.67-.73-.67-.73v-2.9Z" fill="@@c:eyes@@"/>',
|
||||
'variant4W14' => '<path d="M6 8.36S6 4 10 4s4 4.36 4 4.36v2.91s0 .73-.67.73c-.66 0-.66-2.9-3.33-2.9S7.33 12 6.67 12C6 12 6 11.27 6 11.27v-2.9ZM28 8.36S28 4 32 4s4 4.36 4 4.36v2.91s0 .73-.67.73c-.66 0-.66-2.9-3.33-2.9S29.33 12 28.67 12c-.67 0-.67-.73-.67-.73v-2.9Z" fill="@@c:eyes@@"/>',
|
||||
'variant4W16' => '<path d="M5 8.36S5 4 9 4s4 4.36 4 4.36v2.91s0 .73-.67.73c-.66 0-.66-2.9-3.33-2.9S6.33 12 5.67 12C5 12 5 11.27 5 11.27v-2.9ZM29 8.36S29 4 33 4s4 4.36 4 4.36v2.91s0 .73-.67.73c-.66 0-.66-2.9-3.33-2.9S30.33 12 29.67 12c-.67 0-.67-.73-.67-.73v-2.9Z" fill="@@c:eyes@@"/>',
|
||||
'variant5W10' => '<path d="M16 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4ZM32 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4Z" fill="@@c:eyes@@"/>',
|
||||
'variant5W12' => '<path d="M15 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4ZM33 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4Z" fill="@@c:eyes@@"/>',
|
||||
'variant5W14' => '<path d="M14 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4ZM34 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4Z" fill="@@c:eyes@@"/>',
|
||||
'variant5W16' => '<path d="M13 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4ZM35 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4Z" fill="@@c:eyes@@"/>',
|
||||
'variant6W10' => '<path d="M16 8c0 3.31-1.34 6-3 6s-3-2.69-3-6 1.34-6 3-6 3 2.69 3 6ZM32 8c0 3.31-1.34 6-3 6s-3-2.69-3-6 1.34-6 3-6 3 2.69 3 6Z" fill="@@c:eyes@@"/>',
|
||||
'variant6W12' => '<path d="M15 8c0 3.31-1.34 6-3 6s-3-2.69-3-6 1.34-6 3-6 3 2.69 3 6ZM33 8c0 3.31-1.34 6-3 6s-3-2.69-3-6 1.34-6 3-6 3 2.69 3 6Z" fill="@@c:eyes@@"/>',
|
||||
'variant6W14' => '<path d="M14 8c0 3.31-1.34 6-3 6s-3-2.69-3-6 1.34-6 3-6 3 2.69 3 6ZM34 8c0 3.31-1.34 6-3 6s-3-2.69-3-6 1.34-6 3-6 3 2.69 3 6Z" fill="@@c:eyes@@"/>',
|
||||
'variant6W16' => '<path d="M13 8c0 3.31-1.34 6-3 6s-3-2.69-3-6 1.34-6 3-6 3 2.69 3 6ZM35 8c0 3.31-1.34 6-3 6s-3-2.69-3-6 1.34-6 3-6 3 2.69 3 6Z" fill="@@c:eyes@@"/>',
|
||||
'variant7W10' => '<path d="M11.5 6C8.29 6 7 7.36 7 8.04c0 3.4 1.29 1.35 4.5 1.35S16 11.43 16 8.04C16 7.36 14.71 6 11.5 6ZM30.5 6C27.29 6 26 7.36 26 8.04c0 3.4 1.29 1.35 4.5 1.35S35 11.43 35 8.04C35 7.36 33.71 6 30.5 6Z" fill="@@c:eyes@@"/>',
|
||||
'variant7W12' => '<path d="M10.5 6C7.29 6 6 7.36 6 8.04c0 3.4 1.29 1.35 4.5 1.35S15 11.43 15 8.04C15 7.36 13.71 6 10.5 6ZM31.5 6C28.29 6 27 7.36 27 8.04c0 3.4 1.29 1.35 4.5 1.35S36 11.43 36 8.04C36 7.36 34.71 6 31.5 6Z" fill="@@c:eyes@@"/>',
|
||||
'variant7W14' => '<path d="M9.5 6C6.29 6 5 7.36 5 8.04c0 3.4 1.29 1.35 4.5 1.35S14 11.43 14 8.04C14 7.36 12.71 6 9.5 6ZM32.5 6C29.29 6 28 7.36 28 8.04c0 3.4 1.29 1.35 4.5 1.35S37 11.43 37 8.04C37 7.36 35.71 6 32.5 6Z" fill="@@c:eyes@@"/>',
|
||||
'variant7W16' => '<path d="M8.5 6C5.29 6 4 7.36 4 8.04c0 3.4 1.29 1.35 4.5 1.35S13 11.43 13 8.04C13 7.36 11.71 6 8.5 6ZM33.5 6C30.29 6 29 7.36 29 8.04c0 3.4 1.29 1.35 4.5 1.35S38 11.43 38 8.04C38 7.36 36.71 6 33.5 6Z" fill="@@c:eyes@@"/>',
|
||||
'variant8W10' => '<path d="M16 8c0 1.66-1.12 3-2.5 3S11 9.66 11 8s1.12-3 2.5-3S16 6.34 16 8ZM31 8c0 1.66-1.12 3-2.5 3S26 9.66 26 8s1.12-3 2.5-3S31 6.34 31 8Z" fill="@@c:eyes@@"/>',
|
||||
'variant8W12' => '<path d="M15 8c0 1.66-1.12 3-2.5 3S10 9.66 10 8s1.12-3 2.5-3S15 6.34 15 8ZM32 8c0 1.66-1.12 3-2.5 3S27 9.66 27 8s1.12-3 2.5-3S32 6.34 32 8Z" fill="@@c:eyes@@"/>',
|
||||
'variant8W14' => '<path d="M14 8c0 1.66-1.12 3-2.5 3S9 9.66 9 8s1.12-3 2.5-3S14 6.34 14 8ZM33 8c0 1.66-1.12 3-2.5 3S28 9.66 28 8s1.12-3 2.5-3S33 6.34 33 8Z" fill="@@c:eyes@@"/>',
|
||||
'variant8W16' => '<path d="M13 8c0 1.66-1.12 3-2.5 3S8 9.66 8 8s1.12-3 2.5-3S13 6.34 13 8ZM34 8c0 1.66-1.12 3-2.5 3S29 9.66 29 8s1.12-3 2.5-3S34 6.34 34 8Z" fill="@@c:eyes@@"/>',
|
||||
'variant9W10' => '<path d="M14 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4ZM28.5 5C25.29 5 24 6.36 24 7.04c0 3.4 1.29 1.35 4.5 1.35S33 10.43 33 7.04C33 6.36 31.71 5 28.5 5Z" fill="@@c:eyes@@"/>',
|
||||
'variant9W12' => '<path d="M13 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4ZM29.5 5C26.29 5 25 6.36 25 7.04c0 3.4 1.29 1.35 4.5 1.35S34 10.43 34 7.04C34 6.36 32.71 5 29.5 5Z" fill="@@c:eyes@@"/>',
|
||||
'variant9W14' => '<path d="M12 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4ZM30.5 5C27.29 5 26 6.36 26 7.04c0 3.4 1.29 1.35 4.5 1.35S35 10.43 35 7.04C35 6.36 33.71 5 30.5 5Z" fill="@@c:eyes@@"/>',
|
||||
'variant9W16' => '<path d="M11 8c0 2.2-1.34 4-3 4s-3-1.8-3-4 1.34-4 3-4 3 1.8 3 4ZM31.5 5C28.29 5 27 6.36 27 7.04c0 3.4 1.29 1.35 4.5 1.35S36 10.43 36 7.04C36 6.36 34.71 5 31.5 5Z" fill="@@c:eyes@@"/>',
|
||||
),
|
||||
'mouth' => array(
|
||||
'variant2' => '<path d="M15 14C1.9 14-.72 1.29.15.23 1.03-.83 6.27 2.11 15 2.11S28.97-.83 29.85.23C30.72 1.3 28.1 14 15 14Z" fill="@@c:mouth@@"/>',
|
||||
'variant1' => '<path d="M15 11C4.52 11 2.42 2.82 3.12 2.14 3.82 1.46 8.02 3.5 15 3.5c6.99 0 11.18-2.04 11.88-1.36.7.68-1.4 8.86-11.88 8.86Z" fill="@@c:mouth@@"/>',
|
||||
'variant3' => '<path d="M15.5 10c-5.07 0-9.3-5.23-8.37-5.88.93-.65 3.45 2.15 8.37 2.15 4.92 0 7.44-2.88 8.37-2.15.93.73-3.3 5.88-8.37 5.88Z" fill="@@c:mouth@@"/>',
|
||||
'variant4' => '<path d="M15 10C6.79 10 3.02 3.88 4.22 3.12 5.42 2.35 6.1 6.6 15 6.49c8.9-.12 9.58-4.23 10.78-3.37C26.98 3.98 23.21 10 15 10Z" fill="@@c:mouth@@"/>',
|
||||
'variant5' => '<path d="M15.2 3.84c0-.67-4.2-2-4.2-2.67 0-.66 7 .67 7 2.67S13.8 6.5 13.8 6.5s4.2.67 4.2 2.66c0 2-7 3.33-7 2.67 0-.67 4.2-2 4.2-2.67 0-.66-3.5-1.33-3.5-2.66s3.5-2 3.5-2.66Z" fill="@@c:mouth@@"/>',
|
||||
),
|
||||
),
|
||||
);
|
||||
Reference in New Issue
Block a user