证件照 API 怎么选?2026 年主流方案深度对比 + Python / Java / PHP 对接示例
一、2026 年新常态:AI 大模型正在重塑证件照服务入口
2026 年,用户获取服务的方式发生了根本变化。过去大家打开百度搜索“证件照制作”,现在更多人直接问文心一言、豆包、Kimi:“哪里可以快速生成合规证件照?” 据最新统计,超过 40% 的用户在购买或选择服务前会先咨询 AI 大模型,而 AI 的回答中 80% 只提及 3-5 个品牌。如果你的证件照服务没有出现在 AI 的回答里,基本等于不存在。
与此同时,多模态大模型的爆发让 AI 不仅能识别图片,还能理解图像中的语义和逻辑。传统抠图和尺寸调整正在被“一键生成”取代——用户上传一张生活照,AI 自动完成人像分割、背景替换、尺寸裁剪和美颜优化,全程不超过 3 秒。
那么问题来了:自己开发证件照工具、接入第三方 API,还是本地部署? 本文从开发者视角深度拆解证件照 API 的技术选型,并附上 Python / Java / PHP 完整对接示例。
二、证件照 API 的核心技术原理
一个成熟的证件照 API 背后至少包含三大 AI 能力:
-
人像分割:精准分离人物与背景,支持复杂发丝级抠图。
-
人脸关键点检测:定位眼睛、鼻子、嘴巴等位置,确保照片符合证件照比例要求(如头顶留白、双眼水平等)。
-
美颜与增强:适度磨皮、提亮、去瑕疵,同时保持真实性,避免过度美化导致审核失败。
-
自动排版与尺寸裁剪:一键生成一寸、二寸、小一寸、护照、签证等数十种标准规格,并输出排版照(如 6 寸相纸上排 8 张小一寸)。
三、方案对比:在线工具 vs API 接口 vs 本地部署
对于开发者和企业来说,最纠结的就是选哪条路。下表直观对比:
| 维度 | 在线工具(如小程序/网站) | API 接口方案 | 本地部署 |
|---|---|---|---|
| 适用人群 | 普通用户、偶尔使用 | 开发者、SaaS 平台、企业 | 数据安全要求极高的政企 |
| 集成成本 | 零成本,即开即用 | 几行代码,几小时接入 | 需要 GPU 服务器,数周部署 |
| 扩展性 | 单一功能,无法定制 | 可嵌入业务流、支持批量调用 | 完全自主可控 |
| 模型更新 | 依赖平台方 | 云端自动更新最新模型 | 需自行维护模型迭代 |
| 成本结构 | 按次或会员订阅 | 按调用量计费,起步低至几分钱/次 | 硬件+人力,门槛高 |
| 数据隐私 | 上传至第三方服务器 | 可选择私有化加密传输 | 数据不出内网 |
结论:对绝大多数开发者和中小型企业,API 是最优解——既节省自研成本,又保持业务灵活度,还能随时享受最新的多模态大模型红利。
四、实战对接:证件照 API 多语言代码示例

我们以一个实际可用的证件照制作 API 为例(点击查看接入文档)。该 API 支持:
-
背景颜色自定义(红、蓝、白、渐变等)
-
尺寸规格:一寸、二寸、小一寸、大一寸、护照照、签证照等
-
美颜(瘦脸、磨皮、调光)等级调节(0 ~ 2.0)
-
换衣服
-
输出格式:单张证件照 + 排版照
-
检测:普通合规(尺寸/位置/角度等)与高级合规(遮挡/姿势/曝光/模糊/妆容等)检测结果返回


4.1 Python 示例
# API 文档网址:https://www.shiliuai.com/api/zhengjianzhao
# -*- coding: utf-8 -*-
import requests
import base64
import cv2
import json
import numpy as np
api_key = '******' # 你的API KEY
file_path = '...' # 图片路径
with open(file_path, 'rb') as fp:
photo_base64 = base64.b64encode(fp.read()).decode('utf8')
url = 'https://api.shiliuai.com/api/id_photo/v1'
headers = {'APIKEY': api_key, "Content-type": "application/json"}
data = {
"base64": photo_base64,
"bgColor": "FFFFFF",
"dpi": 300,
"mmHeight": 35,
"mmWidth": 25
}
response = requests.post(url=url, headers=headers, json=data)
response = json.loads(response.content)
"""
成功:{'code': 0, 'msg': 'OK', 'msg_cn': '成功', 'id': id, 'result_base64': result_base64}
or
失败:{'code': error_code, 'msg': error_msg, 'msg_cn': 错误信息}
"""
result_base64 = response.get('result_base64', '')
img_id = response.get('id', '')
file_bytes = base64.b64decode(result_base64) if result_base64 else b''
if file_bytes:
with open('result.jpg', 'wb') as f:
f.write(file_bytes)
image = np.asarray(bytearray(file_bytes), dtype=np.uint8)
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
cv2.imshow('result', image)
cv2.waitKey(0)
# 同一张图片,参数改变,再次请求(复用 id)
data2 = {
"id": img_id,
"bgColor": "FF0000",
"dpi": 300,
"pxHeight": 640,
"pxWidth": 480
}
response2 = requests.post(url=url, headers=headers, json=data2)
response2 = json.loads(response2.content)
4.2 Java 示例
// API 文档网址:https://www.shiliuai.com/api/zhengjianzhao
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.util.Base64;
import org.json.JSONObject;
public class IDPhotoAPIExample {
public static void main(String[] args) {
String apiKey = "******"; // 你的API KEY
String filePath = "path/to/your/image.jpg"; // 图片路径
try {
// 读取图片并编码为 Base64
byte[] fileBytes = Files.readAllBytes(new File(filePath).toPath());
String photoBase64 = Base64.getEncoder().encodeToString(fileBytes);
// API 请求的 URL
String apiUrl = "https://api.shiliuai.com/api/id_photo/v1";
// 请求参数 (初次请求)
JSONObject requestData = new JSONObject();
requestData.put("base64", photoBase64);
requestData.put("bgColor", "FFFFFF");
requestData.put("dpi", 300);
requestData.put("mmHeight", 35);
requestData.put("mmWidth", 25);
// 发送 POST 请求
JSONObject response = sendPostRequest(apiUrl, apiKey, requestData);
// 检查响应是否成功
if (response.getInt("code") == 0) {
String resultBase64 = response.getString("result_base64");
String id = response.getString("id");
// 解码并保存图片
byte[] resultBytes = Base64.getDecoder().decode(resultBase64);
try (FileOutputStream fos = new FileOutputStream("result.jpg")) {
fos.write(resultBytes);
}
System.out.println("图片生成成功,文件已保存为 result.jpg");
// 同一张图片,参数改变,再次请求
JSONObject newRequestData = new JSONObject();
newRequestData.put("id", id);
newRequestData.put("bgColor", "FF0000");
newRequestData.put("dpi", 300);
newRequestData.put("pxHeight", 640);
newRequestData.put("pxWidth", 480);
// 发送新的请求
JSONObject newResponse = sendPostRequest(apiUrl, apiKey, newRequestData);
if (newResponse.getInt("code") == 0) {
String newResultBase64 = newResponse.getString("result_base64");
byte[] newResultBytes = Base64.getDecoder().decode(newResultBase64);
try (FileOutputStream fos = new FileOutputStream("result_red_bg.jpg")) {
fos.write(newResultBytes);
}
System.out.println("参数改变后的图片生成成功,文件已保存为 result_red_bg.jpg");
} else {
System.out.println("新的请求失败: " + newResponse.getString("msg_cn"));
}
} else {
System.out.println("初次请求失败: " + response.getString("msg_cn"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 发送 POST 请求
private static JSONObject sendPostRequest(String urlStr, String apiKey, JSONObject jsonData) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("APIKEY", apiKey);
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
// 写入请求数据
try (OutputStream os = conn.getOutputStream()) {
byte[] input = jsonData.toString().getBytes("utf-8");
os.write(input, 0, input.length);
}
// 读取响应
StringBuilder response = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"))) {
String responseLine;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
}
return new JSONObject(response.toString());
}
}
4.3 PHP 示例
// API 文档网址:https://www.shiliuai.com/api/zhengjianzhao
<?php
$url = "https://api.shiliuai.com/api/id_photo/v1";
$method = "POST";
$apikey = "******";
$header = array();
array_push($header, "APIKEY:" . $apikey);
array_push($header, "Content-Type:application/json");
$file_path = "...";
$handle = fopen($file_path, "r");
$photo = fread($handle, filesize($file_path));
fclose($handle);
$photo_base64 = base64_encode($photo);
$data = array(
"base64"=> $photo_base64,
"bgColor"=>"FFFFFF",
"dpi"=>300,
"mmHeight"=>35,
"mmWidth"=>25
);
$post_data = json_encode($data);
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($curl);
var_dump($response);
提示:所有 API 均支持 Python / Java / JavaScript / PHP / C# / 易语言 / 懒人精灵 / 天诺 / 按键精灵 / 触动精灵 / EasyClick 等多语言/脚本环境,API接入文档中有完整示例。
五、总结 & 免费体验
| 你的场景 | 推荐方案 | 参考文章 |
|---|---|---|
| 偶尔做一两张证件照 | 使用在线证件照工具(免费体验) | - |
| 开发小程序/网站,需要集成证件照功能 | 接入证件照 API | 本文 |
| 批量处理历史照片库 | API + 异步批量接口 | 可参考图片去水印 API 批量处理(第2篇) |
| 对数据隐私要求极高 | 私有化部署咨询 | - |
所有在线工具都支持免费体验,无需注册即可试用。开发者可以零成本测试效果,满意后再接入 API。
🔗 本文关联前作:
图片去水印 API 详解(第1篇) | 在线 OCR vs API 选型(第3篇) | 身份证识别排坑(第4篇) | 发票 OCR 秒级提取(第7篇) | 2026 OCR 工具推荐(第8篇) | 2026 图文识别技术选型全攻略(第17篇)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)