SDKs
Java

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

参数类型默认值说明
configConfig配置信息,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

参数类型默认值说明
paramsMap<String, Object>调用参数,更多信息请查询API文档。其中的PublicKeyPrivateKeySignature这3个公共参数无需填写。
respClassClass<T>返回值数据的Bean.class,使用Gson解析

<T> void Picpik.call(Map<String, Object> body, ResponseCallback<T> callback)

异步调用API。返回值:void

参数类型默认值说明
paramsMap<String, Object>调用参数,更多信息请查询API文档。其中的PublicKeyPrivateKeySignature这3个公共参数无需填写。
callbackResponseCallback<T>异步回调callback,泛型:数据的Bean.class,使用Gson解析。

String Picpik.localImg2Base64(String path)

从本地获取图片或遮罩并转换为Base64编码格式。返回值:String

参数类型默认值说明
pathString图片或遮罩的本地路径。

String Picpik.remoteImg2Base64(String url)

远程获取图片或遮罩并转换为Base64编码格式。返回值:String

参数类型默认值说明
urlString图片或遮罩的链接地址。如果url并非以“https://”开头,本SDK会尝试自动修正。

TaskDetail Picpik.pollingTask(String taskUID, int interval, ResponseCallback<TaskDetail> callback)

轮询一个任务。返回值:TaskDetail

参数类型默认值说明
taskUIDString调用生成和修改类API后获得的任务ID。
intervalInt轮询的时间间隔,单位为毫秒。
callbackResponseCallback<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);