From d4d3432c763a1cd88f1eb3e8af8e2c71f3d7f7a4 Mon Sep 17 00:00:00 2001 From: LamGC Date: Mon, 8 Jun 2020 15:30:22 +0800 Subject: [PATCH] =?UTF-8?q?[Add]=20PixivUgoiraBuilder=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=96=B9=E6=B3=95'buildUgoira(OutputStream,=20boolean)'?= =?UTF-8?q?=E4=BB=A5=E6=8F=90=E4=BE=9B=E8=BE=93=E5=87=BA=E6=B5=81=E7=BB=99?= =?UTF-8?q?Builder=E8=BE=93=E5=87=BA=E5=B7=B2=E6=9E=84=E5=BB=BA=E7=9A=84?= =?UTF-8?q?=E5=8A=A8=E5=9B=BE=E6=95=B0=E6=8D=AE;=20[Add]=20PixivUgoiraBuil?= =?UTF-8?q?der=20=E5=A2=9E=E5=8A=A0=E6=96=B9=E6=B3=95'getUgoiraMeta():Json?= =?UTF-8?q?Object'=E6=96=B9=E6=B3=95,=20=E5=8F=AF=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E8=AF=A5=E6=96=B9=E6=B3=95=E8=8E=B7=E5=8F=96=E5=8A=A8=E5=9B=BE?= =?UTF-8?q?=E5=85=83=E6=95=B0=E6=8D=AE;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lamgc/cgj/pixiv/PixivUgoiraBuilder.java | 28 +++++++++++++++++-- .../cgj/pixiv/PixivUgoiraBuilderTest.java | 2 ++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/lamgc/cgj/pixiv/PixivUgoiraBuilder.java b/src/main/java/net/lamgc/cgj/pixiv/PixivUgoiraBuilder.java index eaaa79b..125b10d 100644 --- a/src/main/java/net/lamgc/cgj/pixiv/PixivUgoiraBuilder.java +++ b/src/main/java/net/lamgc/cgj/pixiv/PixivUgoiraBuilder.java @@ -82,7 +82,33 @@ public final class PixivUgoiraBuilder { log.debug("IllustId: {}, UgoiraMeta: {}", this.illustId, this.ugoiraMeta); } + /** + * 获取动图元数据 + * @return 动图元数据, 返回的对象不影响Builder中的meta对象 + */ + public JsonObject getUgoiraMeta() { + return this.ugoiraMeta.deepCopy(); + } + + /** + * 构建动图 + * @param original 是否为原图画质 + * @return 返回动图数据输入流 + * @throws IOException 当获取数据发生异常时抛出 + */ public InputStream buildUgoira(boolean original) throws IOException { + ByteArrayOutputStream bufferOutput = new ByteArrayOutputStream(); + buildUgoira(bufferOutput, original); + return new ByteArrayInputStream(bufferOutput.toByteArray()); + } + + /** + * 构建动图 + * @param outputStream 动图输出流 + * @param original 是否为原图画质 + * @throws IOException 当获取数据发生异常时抛出 + */ + public void buildUgoira(OutputStream outputStream, boolean original) throws IOException { getUgoiraImageSize(); log.debug("动图尺寸信息: Height: {}, Width: {}", height, width); @@ -95,7 +121,6 @@ public final class PixivUgoiraBuilder { HttpResponse response = httpClient.execute(request); log.trace("请求已发送, 正在处理响应..."); ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(response.getEntity().getContent(), 64 * 1024)); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ZipEntry entry; ByteArrayOutputStream cacheOutputStream = new ByteArrayOutputStream(512); HashMap frameMap = new HashMap<>(frames.size()); @@ -140,7 +165,6 @@ public final class PixivUgoiraBuilder { } }); encoder.finishEncoding(); - return new ByteArrayInputStream(outputStream.toByteArray()); } /** diff --git a/src/test/java/net/lamgc/cgj/pixiv/PixivUgoiraBuilderTest.java b/src/test/java/net/lamgc/cgj/pixiv/PixivUgoiraBuilderTest.java index 149078a..1c96f4d 100644 --- a/src/test/java/net/lamgc/cgj/pixiv/PixivUgoiraBuilderTest.java +++ b/src/test/java/net/lamgc/cgj/pixiv/PixivUgoiraBuilderTest.java @@ -6,6 +6,7 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.bouncycastle.util.io.Streams; import org.junit.Ignore; import org.junit.Test; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; @@ -20,6 +21,7 @@ public class PixivUgoiraBuilderTest { File outputFile = new File("./output2.gif"); CloseableHttpClient httpClient = HttpClientBuilder.create().setProxy(new HttpHost("127.0.0.1", 1001)).build(); PixivUgoiraBuilder builder = new PixivUgoiraBuilder(httpClient, 80766493); + LoggerFactory.getLogger(PixivUgoiraBuilderTest.class).info("UgoiraMeta: {}", builder.getUgoiraMeta()); InputStream inputStream = builder.buildUgoira(true); Files.write(outputFile.toPath(), Streams.readAll(inputStream)); }