照相馆、学校或求职服务想做一款证件照小程序,可以先验证最小的一步:选一张照片,替换背景色,预览结果。下面的本机原型使用已经安装的 ComfyUI 和 BiRefNet 抠出人像,再把原始像素合到纯色背景上;不磨皮、不换脸、不生成正装。准备环境约 25 分钟,处理时间看电脑性能,不调用在线生图服务。

演示用的是带“豆包AI生成”标记的合成人像,不是真人照片。它只能说明换底色流程能运行,不能证明这张图或处理结果符合任何证件要求。

本机证件照换底色示例,使用带 AI 标记的合成人像测试,保留原图人像。本机证件照换底色示例,使用带 AI 标记的合成人像测试,保留原图人像。

先把第一版范围定小

第一版只验收三件事:能选图、能在白色和浅蓝色间切换、能看到处理结果。ComfyUI 负责生成人像蒙版,Python 小服务负责把原图与底色合成,小程序只负责选择和预览。

flowchart LR
  A[小程序模拟器] -->|本机上传| B[127.0.0.1:8765 本地服务]
  B -->|请求蒙版| C[ComfyUI + BiRefNet]
  C -->|返回蒙版| B
  B -->|原图像素 + 纯色背景| A
准备项 需要什么
电脑 已能运行 ComfyUI 的 Mac;本机模拟器和服务要在同一台电脑
软件 微信开发者工具、ComfyUI、自带 NumPy 和 Pillow 的 Python 环境
模型 ComfyUI 已有 birefnet.safetensors 和背景去除节点;本教程不下载模型
费用 本机处理不调用在线 API;电脑耗时看现有设备
测试照片 先用练习包里的 AI 合成样片,不要用真实证件或真人照片

先确认办事单位要求的照片规格。国家移民管理局的出入境照片指引指出,P 图和美颜可能造成面部特征失真并导致审核不通过;证件用途应以对应机构的拍摄和提交要求为准。这个小程序原型只做背景预览,不能替代正式拍摄、规格检查或审核。

1. 下载练习包并导入项目

下载证件照小程序本机练习包,解压后打开微信开发者工具,选择“导入项目”,项目目录指向解压后的 project/。项目里的 touristappid 只用于本机模拟器;urlCheck: false 只方便开发工具访问本机服务,不代表线上域名已配置。

打开 project/pages/index/index.js,本地服务地址是:

const API = 'http://127.0.0.1:8765';

不用改它。开发者工具模拟器和 Python 服务都运行在这台 Mac 上,才能通过这个地址互相访问。真机上的 127.0.0.1 指向手机本身,连不到 Mac。

2. 启动 ComfyUI 和本地服务

先在 ComfyUI 中确认有背景去除节点,并已安装 birefnet.safetensors。这篇只使用已有资源,不会下载或更新模型。若节点不存在,先看证件照换底色教程里的安装与模型说明,不要在流量受限时直接拉取大模型。

在终端进入解压后的 backend/ 目录,设置 ComfyUI 的实际路径并启动服务:

export COMFYUI_DIR="/你的ComfyUI完整路径"
"$COMFYUI_DIR/.venv/bin/python" server.py

例如你把 ComfyUI 放在 ~/ai-demo/ComfyUI,就把上面的路径换成该目录的绝对路径。若你的 Python 环境不在 .venv,请用已经安装 NumPy 和 Pillow 的 Python 运行。终端出现 本地原型服务:http://127.0.0.1:8765 后先别关掉,再回到开发者工具编译项目。

本地服务只绑定 127.0.0.1,不会监听局域网或公网。它把图片临时交给同机 ComfyUI;抠图完成后会清掉上传原图和蒙版,结果下载后删除。未取回的结果超过 10 分钟后,会在服务收到下一次请求时清理。

3. 在模拟器里完成一次换底色

  1. 点击“选择一张照片”,从练习包的 samples/sample_ai_portrait.png 选取带 AI 标记的样片。
  2. 先选“白色”,点“生成换底色预览”。等待服务返回结果,检查发丝边缘和衣服边缘是否有明显漏底色。
  3. 再选“浅蓝色”并生成一次,确认只有背景色改变,脸部、头发和衣服仍来自原图。
  4. 测试结束后,检查 ComfyUI 的 input/、output/ 中没有留下本次测试图。

AI 合成样片在 ComfyUI 本机流程中的白底与浅蓝底结果。AI 合成样片在 ComfyUI 本机流程中的白底与浅蓝底结果。

这条链路的重点是先得到蒙版,再把原图像素合成到背景上。程序没有调用图像生成模型重画人脸,所以仍要放大检查头发、耳朵、眼镜和肩膀处的边缘;抠图不准时,先换一张光线均匀、背景简单的照片,不要把边缘修饰成“官方证件照标准”。

4. 把本机原型变成线上服务

练习包不能直接上传发布。上线前需要把本机服务换成正式后端,并完成这些工作:

上线事项 要补的内容
小程序身份 使用所属主体的真实 AppID 和已授权的开发者账号;游客 AppID 不能上传正式版本
服务端 部署 HTTPS API,配置小程序服务器域名、身份校验、上传体积限制、并发和费用上限
图片保护 上传前说明用途和保存时间,取得必要授权;限制后台访问;处理结束后删除原图和中间文件,提供可验证的清理策略
证件规格 按具体办事单位实现尺寸、头部比例、背景和拍摄条件校验,并让真实办事流程确认结果是否可用
审核发布 补齐隐私说明和业务类目,使用真机体验版走完整流程,再按平台要求提交审核和发布

人像照片涉及个人信息处理;若业务处理属于敏感个人信息,还要按个人信息保护法核对特定目的、充分必要性、严格保护措施和单独同意等要求。不要把“点了同意”当成数据保护方案,也不要把证件照保存到公开目录、调试日志或长期缓存里。

给客户报价前,先确认交付究竟是“背景预览”“符合某个机构规格的电子照”还是“冲印服务”,三者成本和责任不同。可以查看本地照相馆和目标客户正在使用的服务,再按返工、冲印、存储和人工检查估价;不要承诺“AI 保证过审”。

练习包和本次验证边界

练习包含完整小程序项目、本机 Python 服务、AI 合成测试图以及白底和浅蓝底输出。本机 API 实测两种底色都返回了 1344×1792 图片;在本机首张约 50 秒,第二张约 9 秒,其他设备会不同。人像像素来自原图,未经过生成式重绘。模型和照片样例都使用本机已有文件,没有下载新模型,也没有把测试照片发到云端。

项目 JavaScript 与后端 Python 文件通过语法检查,练习包内关键源码与本地文件一致;检查记录在练习包的 evidence/static-check-2026-10-14.json。

2026-10-15 在微信开发者工具 2.02.2608080 的 iPhone 12/13 模拟器中完成一轮操作:以 touristappid 导入并编译项目,选择练习包的 AI 标记合成人像,分别生成白底和浅蓝底结果。两次本机上传、结果下载都返回 HTTP 200,模拟器显示了对应背景的预览;调试器错误数为 0。控制台的游客模式和未检查合法域名提示符合本地模拟器设置,wx.operateWXData 的模拟返回警告与本项目功能无关。没有切换或申请真实 AppID。

本次运行生成的上传原图、蒙版和临时结果在处理与取回后清理;检查时没有发现本次请求留下的随机命名文件。ComfyUI 目录里仍有 2026-10-08 和 2026-10-14 的旧 s247 测试文件,本轮没有删除它们。真机相机权限、真实 AppID、HTTPS 后端、审核和发布仍未验证;本教程不声称已经完成线上小程序。

想先理解本机抠图和排版,可以看证件照换底色与排版;想从零熟悉小程序项目结构,可看用 AI 做一个微信小程序本地预览。

封面背景由本机 ComfyUI 生成,标题由脚本排版,并标注“AI生成封面”。