输入内容,生成太阳码

支持网址与文本。URL 字母表内约 ≤58 字符,含中文走字节模式(约 ≤44 字节)。

Ctrl / ⌘ + Enter 快速生成
GIF 动图 logo 只能输出 GIF
经典:等宽笔画,与微信原生一致
纯色:所有墨点都用上面的前景色

logo
建议正方形、透明背景;动图会自动保留动画
结果图

预览为等比缩放,下载得到原尺寸

提示
输入内容后点击「生成」
上传图片,解码内容

支持 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 动图)、角落徽标。

logo
生成结果

上传好友二维码后自动生成

接口文档与在线调试

每个接口都带请求参数、请求示例、响应字段与响应示例(JSON 语法高亮 + 逐字段中文说明), 右侧 TRY 可以直接发请求。失败统一返回 {"error":"原因"} + 4xx 状态码。

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 字段)
参数类型必填说明
textstring是要编码的内容。接口上限 8192 字节;但一枚码只装几十字节:URL 字符集内约 ≤58 字符,含中文/符号走字节模式约 ≤44 字节。
formatstring否png(默认)/ jpg / svg / gif / json。
sizeint否位图边长,120~2000,默认 600。对 svg 无效。
marginint否位图四周白边像素,0~200,默认 0。
fg / bgstring否前景 / 背景色,#rrggbb,默认黑 / 白。
levelstring否允许的最低纠错等级 L/M/Q/H,默认 L;容量够时会自动取更高等级。
versionstring否auto(默认,v0~v2 取最小可容纳)/ 0 / 1 / 2 钉死版本。
maskint否-1(默认)自动在 32 种掩码里按评分取最优;0~31 可固定。
logostring否中心 logo:data:image/png;base64,... / http(s) URL / 裸 base64 / 服务器本地路径。传 GIF 动图且 format=gif 时,逐帧替换中心图,得到动图。
logoRatiofloat否logo 半径缩放,默认 1(半径 108/600)。>1.12 开始压到数据格,靠纠错兜底。
badgestring否角落徽标:default(默认,内嵌图,SVG 写出 data URI、离线可用)/ native(写回远程 URL,与原生实现逐字节一致)/ none 不画 / 自定义图片 URL。
stylestring否笔画风格(只决定形状):classic(默认,等宽胶囊)/ hand(手绘)/ dot(圆点)/ block(方块)/ line(线描:细环+中心点)。
colorstring否配色(只决定墨色,可与任意笔画风格组合):solid(默认,用 fg)/ rainbow(色环:按半径渐变)/ random(彩虹:每一笔随机一色)/ ghost(隐形:墨色只比底色深几级,肉眼几乎看不出,徽标自动隐藏)。除 solid 外都不使用 fg。
ghostint否隐形深度:墨色比底色深几级,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-Typebits18 位格式位常量。
X-WXCode-ModeNUMERIC / 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 / mode18 位格式位;数据模式 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
请求参数(三种投喂方式,选一种)
参数位置说明
filemultipart表单文件字段,-F 'file=@code.png';字段名也接受 image。
(原始二进制)bodyContent-Type: image/png,body 就是图片字节。
imageJSON{"image":"data:image/png;base64,..."} 或 http(s) 链接。
urlquery/JSON给图片地址,服务端下载后解析(仅公网,内网/回环直接 403);单张上限见后台「上传大小」,默认 24MB。
familyquery传 auto 时同一张图依次尝试太阳码和普通二维码;可用 prefer=qr 优先按二维码解析。
返回
字段说明
payload解出的原始内容(逆变换后的链接/文本),业务只需要这个字段。
family / version / ecLevel码型(WX_CODE;family=auto 时也可能是 QR_CODE)、版本、纠错等级。
mask / typebits掩码与 18 位格式位(QR_CODE 没有 typebits)。
mode / count数据模式与字符计数(QR_CODE 没有 count)。
qrTextALPHANUMERIC 模式下码内承载的变换文本(调试用)。
correctionsRS 纠正掉的码字数,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
请求参数
参数位置说明
filemultipart二维码图片,字段名也接受 image。
image / urlJSONdata URL 或图片地址。
(原始二进制)body直接 POST 图片字节。
返回
字段说明
text二维码里的完整文本。
url如果文本里有链接,单独挑出来(微信好友码即 https://u.wechat.com/...),可直接丢给 /api/encode。
version / ecLevel / maskQR 版本(1~40)、纠错等级、掩码。
modeBYTE / NUMERIC / ALPHANUMERIC(含多段时为 A+B)。
modules边长模块数(= 17+4×version)。
correctionsRS 纠正掉的码字数。
通用约定
项说明
鉴权默认匿名可用;管理员可开启「使用需要登录」。程序调用建议在请求头带 X-API-Key,需登录时网页会携带会话 Cookie。
错误4xx/5xx + {"error":"原因"},例如容量不足会提示「载荷超出一枚葵花码容量」。
上传上限图片 8MB(logo)/ 24MB(待解析图片),JSON 16MB。
跨域图片响应已通过 Access-Control-Expose-Headers 暴露 X-WXCode-*。