From acc93d5404f8c3ca0fab4155071fac348298edd0 Mon Sep 17 00:00:00 2001 From: tianmo Date: Wed, 28 Oct 2026 19:19:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B2=E5=87=80=E5=8F=91=E5=B8=83=E5=89=AF?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LICENSES/Spine-3.4-License.txt | 33 + .../LICENSES/Spine-3.5-License.txt | 33 + .../LICENSES/Spine-Legacy-Binary-License.txt | 62 + .../LICENSES/Spine-Runtimes-License.txt | 26 + .../assets/spine-badge.png | Bin 0 -> 4567 bytes .../index.html | 134 + .../js/animated-profiles.js | 102 + .../js/animated-webp-encoder.js | 85 + .../js/library-watcher.js | 121 + .../js/plugin.js | 526 + .../js/progress-window.js | 140 + .../js/renderer.js | 723 + .../js/settings.js | 43 + .../js/spine-assets.js | 140 + .../js/spine-background.js | 31 + .../js/spine-badge.js | 49 + .../js/spine-canvas-clipping.js | 253 + .../js/spine-legacy-binary.js | 263 + .../js/spine-utils.js | 874 + .../js/spine-visible-bounds.js | 33 + .../js/spine-webgl-rasterizer.js | 183 + .../lib/3.4/README.md | 9 + .../lib/3.4/spine-canvas.js | 4767 ++++++ .../lib/3.5/README.md | 11 + .../lib/3.5/spine-canvas.js | 5539 +++++++ .../lib/3.6/spine-canvas.js | 6860 ++++++++ .../lib/3.7/spine-canvas.js | 7117 ++++++++ .../lib/3.8/spine-canvas.js | 8472 ++++++++++ .../lib/4.0/spine-canvas.js | 9066 ++++++++++ .../lib/4.1/spine-canvas.js | 11055 +++++++++++++ .../lib/4.2/spine-canvas.js | 11714 +++++++++++++ .../lib/4.3/spine-canvas.js | 13723 ++++++++++++++++ .../logo.png | Bin 0 -> 70448 bytes .../manifest.json | 21 + .../progress.html | 219 + 35 files changed, 82427 insertions(+) create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-3.4-License.txt create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-3.5-License.txt create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-Legacy-Binary-License.txt create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-Runtimes-License.txt create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/assets/spine-badge.png create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/index.html create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/animated-profiles.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/animated-webp-encoder.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/library-watcher.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/plugin.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/progress-window.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/renderer.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/settings.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/spine-assets.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/spine-background.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/spine-badge.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/spine-canvas-clipping.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/spine-legacy-binary.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/spine-utils.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/spine-visible-bounds.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/js/spine-webgl-rasterizer.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/3.4/README.md create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/3.4/spine-canvas.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/3.5/README.md create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/3.5/spine-canvas.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/3.6/spine-canvas.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/3.7/spine-canvas.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/3.8/spine-canvas.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/4.0/spine-canvas.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/4.1/spine-canvas.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/4.2/spine-canvas.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/lib/4.3/spine-canvas.js create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/logo.png create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/manifest.json create mode 100644 release/UNIVERSAL_SpineThumbnailGenerateServer/progress.html diff --git a/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-3.4-License.txt b/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-3.4-License.txt new file mode 100644 index 0000000..9e0f60d --- /dev/null +++ b/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-3.4-License.txt @@ -0,0 +1,33 @@ +Source revision: ef5013143178918ddfc7cabfbddeae7aec7cf84e (official 3.4.02 tag) +Runtime: https://github.com/EsotericSoftware/spine-runtimes/blob/3.4.02/spine-ts/build/spine-canvas.js +Binary parser source: https://github.com/EsotericSoftware/spine-runtimes/blob/3.4.02/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java + +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ diff --git a/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-3.5-License.txt b/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-3.5-License.txt new file mode 100644 index 0000000..6bec3a2 --- /dev/null +++ b/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-3.5-License.txt @@ -0,0 +1,33 @@ +Source revision: 2cd9467d2736b7f3a0b81382f117c73823bfb44b (official 3.5.51 tag) +Runtime: https://github.com/EsotericSoftware/spine-runtimes/blob/3.5.51/spine-ts/build/spine-canvas.js +Binary parser source: https://github.com/EsotericSoftware/spine-runtimes/blob/3.5.51/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java + +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ diff --git a/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-Legacy-Binary-License.txt b/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-Legacy-Binary-License.txt new file mode 100644 index 0000000..1974c99 --- /dev/null +++ b/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-Legacy-Binary-License.txt @@ -0,0 +1,62 @@ +Source: https://github.com/EsotericSoftware/spine-runtimes/blob/3.6/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + + +Source: https://github.com/EsotericSoftware/spine-runtimes/blob/3.7/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated May 1, 2019. Replaces all prior versions. + * + * Copyright (c) 2013-2019, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS + * INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + diff --git a/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-Runtimes-License.txt b/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-Runtimes-License.txt new file mode 100644 index 0000000..517ff9f --- /dev/null +++ b/release/UNIVERSAL_SpineThumbnailGenerateServer/LICENSES/Spine-Runtimes-License.txt @@ -0,0 +1,26 @@ +Spine Runtimes License Agreement +Last updated April 5, 2025. Replaces all prior versions. + +Copyright (c) 2013-2025, Esoteric Software LLC + +Integration of the Spine Runtimes into software or otherwise creating +derivative works of the Spine Runtimes is permitted under the terms and +conditions of Section 2 of the Spine Editor License Agreement: +https://esotericsoftware.com/spine-editor-license + +Otherwise, it is permitted to integrate the Spine Runtimes into software +or otherwise create derivative works of the Spine Runtimes (collectively, +"Products"), provided that each user of the Products must obtain their own +Spine Editor license and redistribution of the Products in any form must +include this license and copyright notice. + +THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, +BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/release/UNIVERSAL_SpineThumbnailGenerateServer/assets/spine-badge.png b/release/UNIVERSAL_SpineThumbnailGenerateServer/assets/spine-badge.png new file mode 100644 index 0000000000000000000000000000000000000000..422f11a8a54bad9410806524611f221501baacb8 GIT binary patch literal 4567 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 + + + + SpineThumbnailGenerateServer + + + +

Spine缩略图

+
+ 导入 Spine 资产(.skel / .json + .atlas + 贴图)后, + 本插件会为还没设置缩略图的素材生成一张骨骼预览图。 + 它只处理本次新导入的素材,不扫描、不修改历史素材,也不会覆盖你已经设置过的自定义缩略图。 + 生成方式可切换:动态取骨骼里的第一个动画压成 WebP(200×200,体积按动画时长自动定, + 参数与主插件默认值一致),静帧始终用 setup pose。 + 自动生成默认关闭,需要你在下面手动启用。 +
+
+
+ + +
+
+ + +
+
+
状态启动中…
+
素材库—
+
统计—
+
+ + + + + +
+
    + + + + + + + + + + + + + + + + + + + diff --git a/release/UNIVERSAL_SpineThumbnailGenerateServer/js/animated-profiles.js b/release/UNIVERSAL_SpineThumbnailGenerateServer/js/animated-profiles.js new file mode 100644 index 0000000..02529fd --- /dev/null +++ b/release/UNIVERSAL_SpineThumbnailGenerateServer/js/animated-profiles.js @@ -0,0 +1,102 @@ +// 动态缩略图的档位配置。数值与主插件 js/animated-profiles.js 保持一致, +// 后台插件没有参数面板,所以这里只当默认值来源,改这里就等于改后台插件的默认渲染参数。 +(function () { +'use strict'; + +/** + * 每项是 [细节分辨率, 帧率, 编码质量],作为搜索路径上的锚点: + * - 细节分辨率决定画面保留多少细节(输出画布始终是画布边长,小分辨率会被放大填满); + * - 帧率决定每秒采样多少帧,只改采样密度不改时间轴,每档的帧延迟会自动重算; + * - 编码质量是 0–1 的 WebP 质量。 + * + * 数组顺序是从最高画质到最低画质的搜索方向。运行时会在相邻锚点之间插值成一条更密的 + * 路径,再按目标体积在路径上定位,取命中位置附近若干档完整生成,挑出符合体积的那一档。 + */ +const ANIMATED_PRIORITIES = { + // 分辨率优先:先把帧率压到底,再降分辨率。 + resolution: [ + [400, 18, 1.0], [400, 15, 0.8], [400, 12, 0.6], [400, 9, 0.4], [400, 6, 0.2], + [200, 18, 1.0], [200, 15, 0.8], [200, 12, 0.6], [200, 9, 0.4], [200, 6, 0.2], + ], + // 帧率优先:先把分辨率压到底,再降帧率。 + framerate: [ + [400, 18, 1.0], [400, 18, 0.5], [350, 15, 1.0], [350, 15, 0.5], [300, 9, 1.0], + [300, 9, 0.5], [250, 6, 1.0], [250, 6, 0.5], [200, 9, 1.0], [200, 6, 0.5], + ], + // 交替进行:分辨率和帧率交替下降。 + balanced: [ + [400, 15, 0.8], [400, 12, 0.6], [400, 9, 0.4], [400, 6, 0.2], [200, 15, 0.8], + [200, 12, 0.6], [200, 9, 0.4], [200, 6, 0.2], [100, 3, 0.5], [100, 3, 0.1], + ], +}; + +const DEFAULT_PRIORITY = 'resolution'; + +/** 可选的输出画布边长(正方形)。后台插件默认用 200。 */ +const ANIMATED_OUTPUT_SIZES = [200, 400]; +const DEFAULT_OUTPUT_SIZE = 200; + +/** 目标体积的默认建议值:每秒动画配 25 KB,夹在 25–100 KB 之间。 */ +const SIZE_PER_SECOND = 25; +const SIZE_SUGGESTION_RANGE = [25, 100]; + +// 相邻锚点之间插多少个采样点。数值越大,越容易压在目标体积附近,粗估阶段耗时略增。 +const PATH_STEPS_PER_SEGMENT = 6; + +function suggestSize(seconds) { + const [min, max] = SIZE_SUGGESTION_RANGE; + return Math.max(min, Math.min(max, Math.round((Number(seconds) || 0) * SIZE_PER_SECOND))); +} + +function animatedProfiles(priority, outputSize) { + const limit = outputSize || DEFAULT_OUTPUT_SIZE; + const plan = ANIMATED_PRIORITIES[priority] || ANIMATED_PRIORITIES[DEFAULT_PRIORITY]; + return plan.map(([size, fps, quality]) => ({ + size: Math.min(size, limit), + fps, + quality, + })); +} + +/** + * 把锚点路径插值成更密的采样路径,供按目标体积定位使用。 + * 分辨率取整、帧率至少 1、质量保留两位小数;首尾锚点原样保留。 + */ +function expandAnimatedPath(priority, outputSize) { + const limit = outputSize || DEFAULT_OUTPUT_SIZE; + const anchors = ANIMATED_PRIORITIES[priority] || ANIMATED_PRIORITIES[DEFAULT_PRIORITY]; + const lerp = (from, to, t) => from + (to - from) * t; + const path = []; + for (let index = 0; index < anchors.length - 1; index++) { + const [fromSize, fromFps, fromQuality] = anchors[index]; + const [toSize, toFps, toQuality] = anchors[index + 1]; + for (let step = 0; step < PATH_STEPS_PER_SEGMENT; step++) { + const t = step / PATH_STEPS_PER_SEGMENT; + path.push({ + size: Math.min(limit, Math.round(lerp(fromSize, toSize, t))), + fps: Math.max(1, Math.round(lerp(fromFps, toFps, t))), + quality: Math.round(lerp(fromQuality, toQuality, t) * 100) / 100, + }); + } + } + const [size, fps, quality] = anchors[anchors.length - 1]; + path.push({ size: Math.min(size, limit), fps, quality }); + return path; +} + +const api = { + ANIMATED_PRIORITIES, + DEFAULT_PRIORITY, + ANIMATED_OUTPUT_SIZES, + DEFAULT_OUTPUT_SIZE, + SIZE_PER_SECOND, + SIZE_SUGGESTION_RANGE, + PATH_STEPS_PER_SEGMENT, + animatedProfiles, + expandAnimatedPath, + suggestSize, +}; +if (typeof window !== 'undefined') window.SpineAnimatedProfiles = api; +else if (typeof module !== 'undefined' && module.exports) module.exports = api; + +})(); diff --git a/release/UNIVERSAL_SpineThumbnailGenerateServer/js/animated-webp-encoder.js b/release/UNIVERSAL_SpineThumbnailGenerateServer/js/animated-webp-encoder.js new file mode 100644 index 0000000..7badb15 --- /dev/null +++ b/release/UNIVERSAL_SpineThumbnailGenerateServer/js/animated-webp-encoder.js @@ -0,0 +1,85 @@ +// 把若干张 WebP 静帧封装成一个动态 WebP(ANMF 全帧、不混合)。 +// 与主插件 js/animated-webp-encoder.js 是同一份实现,只是出口兼容 + +