输入内容,生成太阳码
支持网址与文本。URL 字母表内约 ≤58 字符,含中文走字节模式(约 ≤44 字节)。
Ctrl / ⌘ + Enter 快速生成
GIF 动图 logo 只能输出 GIF
经典:等宽笔画,与微信原生一致
纯色:所有墨点都用上面的前景色
2~4 几乎看不见(程序能解),8 以上手机更容易扫
建议正方形、透明背景;动图会自动保留动画
结果图
预览为等比缩放,下载得到原尺寸
- 提示
- 输入内容后点击「生成」
上传图片,解码内容
支持 PNG / JPG / GIF;带 logo、轻微旋转、拍照实图都能识别。
点击选择,或把图片拖到这里
上传后自动解析
也可以直接 Ctrl/⌘+V 粘贴截图
- 单张最大 24MB;透明背景按白底处理。
- 中心带 logo、轻微旋转(实测 ±20°)、拍照实图都可识别。
- 解不出时提示「未通过 Reed-Solomon 校验」,多为图片被裁掉或压缩过度。
解码结果
上传图片后,这里会显示内容与码型参数。
解码内容
—
上传微信「加好友」二维码
微信 -> 我 -> 头像 -> 二维码名片,截图后拖进来即可。程序会在服务端解出其中的链接。
点击选择好友二维码图片
也支持直接拖进来
也可以直接 Ctrl/⌘+V 粘贴截图
尚未上传
- 微信好友名片是标准二维码,内容是一条
https://u.wechat.com/...链接。 - 服务端支持 QR 版本 1~40、L/M/Q/H 纠错,截图、拍照、带轻微旋转都能读。
- 解出的链接会直接作为太阳码内容,有效期与微信名片本身一致。
生成好友太阳码
参数与「生成」栏一致:格式、中心 logo(支持 GIF 动图)、角落徽标。
生成结果
上传好友二维码后自动生成
POST
/api/encode
输入内容,返回葵花码图片(png / jpg / svg / gif)或 JSON
curl
curl -X POST https://khm.lxwowbp.cn/api/encode \
-H 'Content-Type: application/json' \
-d '{"text":"https://example.com/","format":"png","size":600}' \
-o code.png
# 把 format 换成 json,就能一次拿到 svg + pngBase64:
# {"text":"https://example.com/","format":"json","version":0,"level":"Q",
# "levelIndex":2,"mask":14,"typebits":122236,"mode":"ALPHANUMERIC",
# "transformed":"5M +*-F/2IH%%Q53E9:/-IP","codewords":38,"ecCodewords":18,
# "size":600,"svg":"<svg ...>","pngBase64":"iVBORw0KGgo..."}
TRY
请求参数(JSON body,或同名的表单/query 字段)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
text | string | 是 | 要编码的内容。接口上限 8192 字节;但一枚码只装几十字节:URL 字符集内约 ≤58 字符,含中文/符号走字节模式约 ≤44 字节。 |
format | string | 否 | png(默认)/ jpg / svg / gif / json。 |
size | int | 否 | 位图边长,120~2000,默认 600。对 svg 无效。 |
margin | int | 否 | 位图四周白边像素,0~200,默认 0。 |
fg / bg | string | 否 | 前景 / 背景色,#rrggbb,默认黑 / 白。 |
level | string | 否 | 允许的最低纠错等级 L/M/Q/H,默认 L;容量够时会自动取更高等级。 |
version | string | 否 | auto(默认,v0~v2 取最小可容纳)/ 0 / 1 / 2 钉死版本。 |
mask | int | 否 | -1(默认)自动在 32 种掩码里按评分取最优;0~31 可固定。 |
logo | string | 否 | 中心 logo:data:image/png;base64,... / http(s) URL / 裸 base64 / 服务器本地路径。传 GIF 动图且 format=gif 时,逐帧替换中心图,得到动图。 |
logoRatio | float | 否 | logo 半径缩放,默认 1(半径 108/600)。>1.12 开始压到数据格,靠纠错兜底。 |
badge | string | 否 | 角落徽标:default(默认,内嵌图,SVG 写出 data URI、离线可用)/ native(写回远程 URL,与原生实现逐字节一致)/ none 不画 / 自定义图片 URL。 |
style | string | 否 | 笔画风格(只决定形状):classic(默认,等宽胶囊)/ hand(手绘)/ dot(圆点)/ block(方块)/ line(线描:细环+中心点)。 |
color | string | 否 | 配色(只决定墨色,可与任意笔画风格组合):solid(默认,用 fg)/ rainbow(色环:按半径渐变)/ random(彩虹:每一笔随机一色)/ ghost(隐形:墨色只比底色深几级,肉眼几乎看不出,徽标自动隐藏)。除 solid 外都不使用 fg。 |
ghost | int | 否 | 隐形深度:墨色比底色深几级,2~40,默认 6。越小越隐形、越难扫(2~4 基本看不见但只有程序能解,8 以上手机更容易扫)。仅 color=ghost 时生效。 |
返回(format = png / jpg / gif / svg)
| 返回 | 说明 |
|---|---|
| 响应体 | 图片二进制,Content-Type 为 image/png / image/jpeg / image/gif / image/svg+xml。 |
X-WXCode-Version | 实际使用的版本(0~2),例如 0。 |
X-WXCode-Level | 实际纠错等级 L/M/Q/H。 |
X-WXCode-Mask | 选中的掩码(0~31)。 |
X-WXCode-Typebits | 18 位格式位常量。 |
X-WXCode-Mode | NUMERIC / ALPHANUMERIC / BYTE。 |
X-WXCode-Codewords 等 | 码字总数 / 数据码字 / 纠错码字数。 |
返回(format = json)
| 字段 | 说明 |
|---|---|
text / format | 实际编码的内容;本次输出格式(固定 json)。 |
version / level / levelIndex / mask | 版本(0~2);实际纠错等级(字母)与下标(0=L、1=M、2=Q、3=H);掩码(0~31)。 |
typebits / mode | 18 位格式位;数据模式 NUMERIC/ALPHANUMERIC/BYTE。 |
transformed | 仅 ALPHANUMERIC 出现:真正写进码里的变换文本。 |
codewords / ecCodewords | 码字总数、其中的纠错码字数。 |
size | 位图边长(像素),与请求一致。 |
svg / pngBase64 | 矢量 SVG 文本与 PNG 的 base64(不含 data: 前缀,一次拿全,前端好预览/下载)。 |
logoAnimated / logoFrames | 仅 logo 是动图时出现:是否动图、共几帧。 |
GET
/api/encode
同样的能力走 query,可直接放进 <img src>
图片标签
<img src="https://khm.lxwowbp.cn/api/encode?text=https%3A%2F%2Fexample.com%2F&format=png&size=400">
TRY
请求参数(URL query)
| 参数 | 说明 |
|---|---|
text | 必填,内容;记得 URL 编码(https%3A%2F%2F...)。 |
format / size / margin | 同 POST。做 <img> 时最常用 format=png&size=400。 |
fg / bg / level / version / mask | 同 POST。 |
logo / logoRatio / badge | 同 POST;query 里的 logo 建议用 http(s) URL 或已编码的 data URL。 |
返回
| 返回 | 说明 |
|---|---|
| 响应体 + 响应头 | 与 POST 完全一致:图片二进制 + X-WXCode-* 头(format=json 时返回 JSON)。 |
POST
/api/decode
上传太阳码图片,解出内容
curl
curl -X POST https://khm.lxwowbp.cn/api/decode \
-F 'file=@code.png'
# 返回(字段含义见下方表格)
# {"family":"WX_CODE","version":0,"ecLevel":"Q","mask":14,"typebits":122236,
# "mode":"ALPHANUMERIC","count":23,"qrText":"5M +*-F/2IH%%Q53E9:/-IP",
# "payload":"https://example.com/","corrections":0,
# "box":{"x":0.499,"y":0.499,"rx":0.507,"ry":0.507}}
TRY
请求参数(三种投喂方式,选一种)
| 参数 | 位置 | 说明 |
|---|---|---|
file | multipart | 表单文件字段,-F 'file=@code.png';字段名也接受 image。 |
| (原始二进制) | body | Content-Type: image/png,body 就是图片字节。 |
image | JSON | {"image":"data:image/png;base64,..."} 或 http(s) 链接。 |
url | query/JSON | 给图片地址,服务端下载后解析(仅公网,内网/回环直接 403);单张上限见后台「上传大小」,默认 24MB。 |
family | query | 传 auto 时同一张图依次尝试太阳码和普通二维码;可用 prefer=qr 优先按二维码解析。 |
返回
| 字段 | 说明 |
|---|---|
payload | 解出的原始内容(逆变换后的链接/文本),业务只需要这个字段。 |
family / version / ecLevel | 码型(WX_CODE;family=auto 时也可能是 QR_CODE)、版本、纠错等级。 |
mask / typebits | 掩码与 18 位格式位(QR_CODE 没有 typebits)。 |
mode / count | 数据模式与字符计数(QR_CODE 没有 count)。 |
qrText | ALPHANUMERIC 模式下码内承载的变换文本(调试用)。 |
corrections | RS 纠正掉的码字数,0 表示读得很干净。 |
box | 码在图里的外接圆 {x,y,rx,ry}(0~1 归一化),定位失败时不返回;前端用它裁缩略图。 |
text / url / modules | 仅 QR_CODE 出现:二维码文本、其中的链接、边长模块数(= 17+4×version)。 |
POST
/api/qr
解析普通二维码(微信「加好友」名片),取出里面的链接
curl
curl -X POST https://khm.lxwowbp.cn/api/qr \
-F 'file=@friend.png'
# 返回(JSON,字段含义见下方表格)
# {
# "text": "https://u.wechat.com/xxxxxxxxxxxx", ← 二维码里的完整文本
# "url": "https://u.wechat.com/xxxxxxxxxxxx", ← 其中的链接,可直接给 /api/encode
# "version": 4, ← QR 版本 1~40
# "ecLevel": "M", ← 纠错等级 L/M/Q/H
# "mask": 3, ← 掩码 0~7
# "mode": "BYTE", ← 数据模式
# "modules": 33, ← 边长模块数 = 17 + 4 × version
# "corrections": 0 ← RS 纠错修掉的码字数
# }
TRY
请求参数
| 参数 | 位置 | 说明 |
|---|---|---|
file | multipart | 二维码图片,字段名也接受 image。 |
image / url | JSON | data URL 或图片地址。 |
| (原始二进制) | body | 直接 POST 图片字节。 |
返回
| 字段 | 说明 |
|---|---|
text | 二维码里的完整文本。 |
url | 如果文本里有链接,单独挑出来(微信好友码即 https://u.wechat.com/...),可直接丢给 /api/encode。 |
version / ecLevel / mask | QR 版本(1~40)、纠错等级、掩码。 |
mode | BYTE / NUMERIC / ALPHANUMERIC(含多段时为 A+B)。 |
modules | 边长模块数(= 17+4×version)。 |
corrections | RS 纠正掉的码字数。 |
通用约定
| 项 | 说明 |
|---|---|
| 鉴权 | 默认匿名可用;管理员可开启「使用需要登录」。程序调用建议在请求头带 X-API-Key,需登录时网页会携带会话 Cookie。 |
| 错误 | 4xx/5xx + {"error":"原因"},例如容量不足会提示「载荷超出一枚葵花码容量」。 |
| 上传上限 | 图片 8MB(logo)/ 24MB(待解析图片),JSON 16MB。 |
| 跨域 | 图片响应已通过 Access-Control-Expose-Headers 暴露 X-WXCode-*。 |