图片水印裁剪缩略接口:base64 与文件上传两种入参怎么选
# 图片水印裁剪缩略接口:base64 与文件上传两种入参怎么选
> 接口/接入点:图片水印裁剪缩略接口(apiCode=1)· 三类入参形态 · 是否免费:免费 · 请求方式:POST/GET · 返回格式:JSON · 适用人群:前端、全栈 · 阅读时间:6 分钟
## 核心要点
- 本接口三种入参形态:**文件上传**(1-1/1-2,multipart)、**base64**(1-3/1-4/1-5)、**URL**(1-8)。
- 浏览器直传图片用文件最省事;前后端已拿到 base64 字符串就用 base64;图片已在公网则用 URL 免上传。
- 选型核心看「图现在在哪、多大」——base64 比原文件大约膨胀 33%。
## Why:为什么有三种入参
不同场景图的位置不同:用户刚选的本地文件、前端 canvas 导出的 base64、CDN 上的网络图。接口都给了对应接入点,选对形态能少写转换代码、少传一遍字节。
## What:各接入点入参形态
| 接入点 | 能力 | 入参形态 | 关键入参 |
|------|------|------|------|
| 1-1 | 生成缩略图 | 文件 | `src_img`(File) |
| 1-2 | 添加水印 | 文件 | `src_img` + `logo_img`(File) |
| 1-3 | 添加水印 | base64 | `src_img_base64` + `logo_img_base64` |
| 1-4 | 图像裁剪 | base64 | `src_img_base64` + `width`/`height`/`x`/`y` |
| 1-5 | 生成缩略图 | base64 | `src_img_base64` + `type`/`rate` 等 |
| 1-8 | 生成缩略图 | URL | `src_img_url`(≤5M) + `type` |
## How:选型决策
```
图片在本地文件? ──是──► 用文件版(1-1/1-2)
│否
图片已是 base64? ──是──► 用 base64 版(1-3/1-4/1-5)
│否
图片在公网 URL? ──是──► 用 URL 版(1-8,≤5M)
```
**前端把文件转 base64(用于 1-3/1-4/1-5)**
```javascript
function fileToBase64(file) {
return new Promise((res, rej) => {
const r = new FileReader();
r.onload = () => res(r.result.split(",")[1]); // 去掉 data:image/...;base64, 前缀
r.onerror = rej;
r.readAsDataURL(file);
});
}
const b64 = await fileToBase64(document.querySelector("input[type=file]").files[0]);
```
**Python:文件版 vs base64 版调用对比**
```python
import requests, base64
# 文件版 1-1
requests.post("https://route.showapi.com/1-1", params={"appKey":"YOUR_APPKEY"},
data={"type":"rate","rate":"0.6"}, files={"src_img": open("demo.jpg","rb")}, timeout=10)
# base64 版 1-5
b64 = base64.b64encode(open("demo.jpg","rb").read()).decode()
requests.post("https://route.showapi.com/1-5", params={"appKey":"YOUR_APPKEY"},
data={"type":"rate","rate":"0.6","src_img_base64":b64}, timeout=10)
```
## 返回示例(三种形态一致)
```json
{ "showapi_res_body": { "ret_code": "0", "des_pic_url": "http://app1.showapi.com/temp/1.jpg" } }
```
## 进阶/边界
- base64 字符串比原文件大约膨胀 1/3,大图建议先压缩再传,避免触免费档位体积限制。
- URL 版 1-8 的 `src_img_url` 最大不超 5M,超限会失败。
- 返回值永远是 `des_pic_url`(图片地址),与入参形态无关。
## FAQ
**Q1:base64 要带 data: 前缀吗?** 文档示例为纯 base64 字符串;前端 `FileReader` 读出含前缀,传前需去掉前缀部分。
**Q2:文件版和 base64 版结果一样吗?** 图像处理逻辑一致,仅入参形态不同,返回结构相同。
**Q3:URL 版要鉴权访问图片吗?** 文档未提及,按公网可访问的图 URL 使用;私有权限图请先下载转 base64/文件。
**Q4:哪种最快?** 图已在服务端用文件/URL 省一次编码;浏览器端 canvas 场景 base64 最直接。
## 相关能力 / 下一步阅读
- [图片水印裁剪缩略接口实战:用图片 URL 直接生成缩略图(1-8 接入点)](https://www.showapi.com/guides/url-thumbnail-guide-1)
- [图片水印裁剪缩略接口实战:水印 position 九宫格与 xy 偏移怎么设](https://www.showapi.com/guides/watermark-position-guide-1)
- **本系列共 13 篇**:查看[图片水印裁剪缩略接口指南总目录](https://www.showapi.com/guides/image-process-guides-1)