Java SDK
本SDK主要面向使用Java和Android的用户,自动签名并简化调用过程。下载并解压以下文件,将picpik-sdk-java-x.x.x.jar
添加进你的项目依赖:
基础类说明
Config
Picpik 配置项
/**
* 构造方法
* apiUrl: 国内=https://api.picpikai.com/ , 国际=https://api.picpik.ai/
*/
Config(String apiUrl, String publicKey, String privateKey)
// 设置请求日志级别
Config setLogLevel(HttpLoggingInterceptor.Level logLevel)
// 设置连接超时时间
Config setTimeoutConnect(Timeout timeout)
// 设置读超时时间
Config setTimeoutRead(Timeout timeout)
// 设置写超时时间
Config setTimeoutWrite(Timeout timeout)
Config.Timeout
/**
* timeout: 超时时长
* timeUnit: 时长单位
*/
new Timeout(long timeout, TimeUnit timeUnit);
函数说明
void Picpik.init(Config config)
初始化信息。返回值:void
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
config | Config | 无 | 配置信息,apiUrl:国内=https://api.picpikai.com/ (opens in a new tab) , 国际=https://api.picpik.ai/ (opens in a new tab) |
<T> T Picpik.call(Map<String, Object> params, Class<T> respClass)
调用API。返回值:T
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
params | Map<String, Object> | 无 | 调用参数,更多信息请查询API文档。其中的PublicKey 、PrivateKey 和Signature 这3个公共参数无需填写。 |
respClass | Class<T> | 无 | 返回值数据的Bean.class,使用Gson解析 |
<T> void Picpik.call(Map<String, Object> body, ResponseCallback<T> callback)
异步调用API。返回值:void
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
params | Map<String, Object> | 无 | 调用参数,更多信息请查询API文档。其中的PublicKey 、PrivateKey 和Signature 这3个公共参数无需填写。 |
callback | ResponseCallback<T> | 无 | 异步回调callback,泛型:数据的Bean.class,使用Gson解析。 |
String Picpik.localImg2Base64(String path)
从本地获取图片或遮罩并转换为Base64编码格式。返回值:String
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
path | String | 无 | 图片或遮罩的本地路径。 |
String Picpik.remoteImg2Base64(String url)
远程获取图片或遮罩并转换为Base64编码格式。返回值:String
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
url | String | 无 | 图片或遮罩的链接地址。如果url并非以“https://”开头,本SDK会尝试自动修正。 |
TaskDetail Picpik.pollingTask(String taskUID, int interval, ResponseCallback<TaskDetail> callback)
轮询一个任务。返回值:TaskDetail
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
taskUID | String | 无 | 调用生成和修改类API后获得的任务ID。 |
interval | Int | 无 | 轮询的时间间隔,单位为毫秒。 |
callback | ResponseCallback<TaskDetail> | 无 | 选填,轮询时的回调函数,该函数会返回一个TaskDetail ,包含了当前任务的详细信息。 |
环境依赖
以Maven pom.xml为例
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>4.12.0</version>
</dependency>
使用示例
示例:生成一只鸟的图片,并去除背景。
import ai.picpik.sdk.Config;
import ai.picpik.sdk.Picpik;
import ai.picpik.sdk.ResponseCallback;
import ai.picpik.sdk.bean.TaskDetail;
import com.google.gson.JsonObject;
import java.util.HashMap;
import java.util.Map;
// 国内站
String urlChinese = "https://api.picpikai.com/";
// 国际站
String urlInternational = "https://api.picpik.ai/";
// 设置picpik网关,以及调用API所需的公私钥。登陆官网后,可在用户中心页面找到您的密钥。
Config config = new Config(urlInternational, "your_public_key", "your_private_key");
// config.setLogLevel 设置日志级别。以及setTimeout[Connect,Read,Write]设置不同环节的超时时间。
config.setLogLevel(HttpLoggingInterceptor.Level.BASIC);
// 初始化SDK
Picpik.init(config);
// 获取模型列表。生成图片时,需要指定一个主模型及其参数。与直接调用不同,本SDK在调用API时会自动填写“PublicKey”、“PrivateKey”和“Signature”这些公共参数。
Map<String, Object> params = new HashMap<>();
params.put("Action", "ListModels");
JsonObject data = Picpik.call(params);
JsonObject mainModels = data.getAsJsonObject("MainModels");
JsonObject model = mainModels.getAsJsonObject("PICPIK General");
// 选择模型列表中的一个模型,并生成图片
Map<String, Object> params = new HashMap<>();
params.put("Action", "GenerateImages");
params.put("MainModel", "model");
params.put("PositivePrompts", ["One Bird"]);
JsonObject data = Picpik.call(params);
String taskUID = data.get("TaskUID").getAsString();
// 利用获得的task UID,轮询任务状态。
// 每次轮询结果将通过ResponseCallback<TaskDetail>回调返回。
// 直到Task状态为Finished,方法返回最终结果。如果遇到错误会抛出异常。
TaskDetail detail = Picpik.pollingTask(taskUID, 1000, new ResponseCallback<>() {
@Override
public void onError(Throwable e) {
e.printStackTrace();
// pollingTask接口不会出发该回调
}
@Override
public void onResponse(TaskDetail response) {
// 每次轮询的TaskDetail
}
});
// 任务完成后,获得生成图片的URL并编码为Base64格式。
String imageURL = detail.generatedImageList.get(0);
String base64Img = Picpik.remoteImg2Base64(imageURL);
// 去除背景
Map<String, Object> params = new HashMap<>();
params.put("Action", "RemoveBackground");
params.put("RawImage", base64Img);
data = Picpik.call(params, JsonObject.class);
taskUID = data.get("TaskUID").getAsString();
// 利用获得的task UID,再次执行轮询任务状态,如果不需要每次轮询状态,可以不设置callback。
detail = Picpik.pollingTask(taskUID, 1000, null);
// 任务完成后,获得生成图片的URL
imageURL = "https://" + detail.generatedImageList.get(0)
System.out.println(imageURL);