图片智能缩放 (Resize)
调整图片尺寸,支持按比例缩放、按固定宽高缩放或等比适应。使用 Lanczos 高质量插值算法。
POST
https://******/tools/resize消耗: 1 积分 / 10次同步接口,处理完成后直接返回 JSON。
请求参数
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
| AccountId | string | 是 | 账号ID。 |
| Timestamp | string | 是 | 当前时间戳(毫秒级,CST/UTC+8时区)。 |
| Image | string | 是 | 图片 URL 或 Base64 字符串。 |
| Scale | float | 否 | 缩放比例 (0.0 - 10.0)。例如 0.5 为缩小一半,2.0 为放大两倍。若设置此参数,优先使用。 |
| Width | int | 否 | 目标宽度 (px)。 |
| Height | int | 否 | 目标高度 (px)。 |
| Mode | string | 否 | 缩放模式,默认 "lfit"。可选值:(1) lfit: 等比缩放,限制在矩形内;(2) mfit: 等比缩放,延伸填充;(3) fixed: 强制拉伸。 |
| OutputFormat | string | 否 | 输出格式,默认 JPEG。支持 PNG, WEBP。 |
| Signature | string | 是 | 请求签名。 |
返回示例
{
"Code": 200,
"Message": "Success",
"RequestId": "uuid-...",
"Data": {
"Base64": "data:image/jpeg;base64,/9j/4AAQSk...",
"Width": 800,
"Height": 600
}
}Java 调用示例
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
public class ResizeDemo {
private static final String API_URL = "https://******/tools/resize";
private static final String ACCOUNT_ID = "pic_YOUR_ID";
private static final String SECRET_KEY = "YOUR_SECRET_KEY";
public static void main(String[] args) throws Exception {
Map<String, Object> params = new TreeMap<>();
params.put("AccountId", ACCOUNT_ID);
params.put("Image", "https://example.com/test.jpg");
params.put("Width", 800);
params.put("Mode", "lfit");
// 毫秒级时间戳
params.put("Timestamp", String.valueOf(System.currentTimeMillis()));
String signature = generateSignature(params, SECRET_KEY);
params.put("Signature", signature);
String jsonBody = buildJson(params);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(API_URL))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
private static String generateSignature(Map<String, Object> params, String secret) throws Exception {
String strToSign = params.entrySet().stream()
.filter(e -> e.getValue() != null && !e.getValue().toString().isEmpty())
.map(e -> e.getKey() + "=" + e.getValue())
.collect(Collectors.joining("&")) + "&SecretKey=" + secret;
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
hmacSha256.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
return Base64.getEncoder().encodeToString(hmacSha256.doFinal(strToSign.getBytes(StandardCharsets.UTF_8)));
}
private static String buildJson(Map<String, Object> params) {
StringBuilder sb = new StringBuilder("{");
for (Map.Entry<String, Object> entry : params.entrySet()) {
sb.append(""").append(entry.getKey()).append("":");
if (entry.getValue() instanceof Number) {
sb.append(entry.getValue());
} else {
sb.append(""").append(entry.getValue().toString().replace(""", "\"")).append(""");
}
sb.append(",");
}
if (sb.length() > 1) sb.deleteCharAt(sb.length() - 1);
sb.append("}");
return sb.toString();
}
}