asset-builder-packer 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -3
- package/dist/compose.d.ts +5 -3
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +19 -15
- package/dist/compose.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/place.d.ts.map +1 -1
- package/dist/place.js +20 -18
- package/dist/place.js.map +1 -1
- package/dist/trim.d.ts +3 -1
- package/dist/trim.d.ts.map +1 -1
- package/dist/trim.js +7 -5
- package/dist/trim.js.map +1 -1
- package/dist/types.d.ts +15 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -2
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,12 +6,16 @@ Pixi spritesheet JSON and Spine `.atlas` output.
|
|
|
6
6
|
|
|
7
7
|
Why another packer:
|
|
8
8
|
|
|
9
|
-
- **
|
|
10
|
-
(
|
|
9
|
+
- **Lossless raw-RGBA pages** — frames are cut, rotated and extruded with sharp/libvips and copied
|
|
10
|
+
into the page byte for byte (no blending, so semi-transparent pixels keep their exact values);
|
|
11
|
+
encode once per output format (PNG/WebP/AVIF/JPG) downstream, no intermediate re-encoding.
|
|
11
12
|
- **Typed emitters, not templates/regex** — Pixi JSON and Spine `.atlas` are built from data;
|
|
12
13
|
format variants come from a second emitter call, never string replacement.
|
|
13
14
|
- **First-class trim + rotation for Spine** — correct `offset`/`orig` math with Y-up offsets
|
|
14
|
-
(many pipelines hardcode `offset: 0,0` and can't trim Spine attachments).
|
|
15
|
+
(many pipelines hardcode `offset: 0,0` and can't trim Spine attachments). `trimMargin` (default 1)
|
|
16
|
+
keeps one transparent pixel around the content, so linear filtering at the edge stays the same as in
|
|
17
|
+
the untrimmed sprite. An image can opt out with `allowTrim: false` — needed for regions drawn by
|
|
18
|
+
meshes in pixi-spine, which maps mesh UVs onto the trimmed frame.
|
|
15
19
|
- **Deterministic** — identical input + options ⇒ byte-identical pages and emitter output, so it
|
|
16
20
|
composes cleanly with content-hash build caches.
|
|
17
21
|
- **Fill-rate metrics** — per-page efficiency for VRAM budgeting.
|
|
@@ -29,6 +33,14 @@ for (const page of result.pages) {
|
|
|
29
33
|
}
|
|
30
34
|
```
|
|
31
35
|
|
|
36
|
+
## Changes
|
|
37
|
+
|
|
38
|
+
- **0.0.3** — pages are composed by copying bytes instead of `sharp.composite` (the `over` blend
|
|
39
|
+
premultiplied and rounded semi-transparent pixels by ±1); new option `trimMargin` (default 1: trimmed
|
|
40
|
+
sprites keep one transparent pixel, so they render like untrimmed ones with linear filtering);
|
|
41
|
+
new per-image `allowTrim` to keep single images untrimmed.
|
|
42
|
+
- **0.0.2** — first public version.
|
|
43
|
+
|
|
32
44
|
Status: phase 0 (contract + emitters + tests). Roadmap: [docs/PLAN.md](docs/PLAN.md).
|
|
33
45
|
Working agreements and invariants: [CLAUDE.md](CLAUDE.md).
|
|
34
46
|
|
package/dist/compose.d.ts
CHANGED
|
@@ -6,9 +6,11 @@ import type { InputImage, PackedPage } from './types.js';
|
|
|
6
6
|
*
|
|
7
7
|
* На кадр: извлекается трим-окно из исходника → при rotated поворот 90° CW (sharp.rotate(90),
|
|
8
8
|
* направление подтверждено пиксельным тестом — соответствует Pixi `rotated:true` / Spine
|
|
9
|
-
* `rotate:270`) → extrude-кайма репликацией краёв (extendWith:'copy') →
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* `rotate:270`) → extrude-кайма репликацией краёв (extendWith:'copy') → побайтовое копирование в
|
|
10
|
+
* позицию. Кадры не пересекаются, поэтому смешивание не нужно; sharp.composite (blend 'over') не
|
|
11
|
+
* годится — он premultiply-ит и округляет полупрозрачные пиксели (±1). Aliases не рендерятся
|
|
12
|
+
* отдельно — они ссылаются на тот же регион на этапе эмиттеров. Выход — сырой RGBA (кодирование
|
|
13
|
+
* форматов — снаружи, FR-24).
|
|
12
14
|
*/
|
|
13
15
|
export declare function composePage(page: Omit<PackedPage, 'data'>, images: Map<string, InputImage>, extrude: number): Promise<Buffer>;
|
|
14
16
|
//# sourceMappingURL=compose.d.ts.map
|
package/dist/compose.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":";;AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":";;AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC7B,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC/B,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CA6BjB"}
|
package/dist/compose.js
CHANGED
|
@@ -4,12 +4,14 @@ import sharp from 'sharp';
|
|
|
4
4
|
*
|
|
5
5
|
* На кадр: извлекается трим-окно из исходника → при rotated поворот 90° CW (sharp.rotate(90),
|
|
6
6
|
* направление подтверждено пиксельным тестом — соответствует Pixi `rotated:true` / Spine
|
|
7
|
-
* `rotate:270`) → extrude-кайма репликацией краёв (extendWith:'copy') →
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* `rotate:270`) → extrude-кайма репликацией краёв (extendWith:'copy') → побайтовое копирование в
|
|
8
|
+
* позицию. Кадры не пересекаются, поэтому смешивание не нужно; sharp.composite (blend 'over') не
|
|
9
|
+
* годится — он premultiply-ит и округляет полупрозрачные пиксели (±1). Aliases не рендерятся
|
|
10
|
+
* отдельно — они ссылаются на тот же регион на этапе эмиттеров. Выход — сырой RGBA (кодирование
|
|
11
|
+
* форматов — снаружи, FR-24).
|
|
10
12
|
*/
|
|
11
13
|
export async function composePage(page, images, extrude) {
|
|
12
|
-
const
|
|
14
|
+
const pageData = Buffer.alloc(page.width * page.height * 4);
|
|
13
15
|
for (const frame of page.frames) {
|
|
14
16
|
const src = images.get(frame.name);
|
|
15
17
|
if (!src)
|
|
@@ -30,17 +32,19 @@ export async function composePage(page, images, extrude) {
|
|
|
30
32
|
const { data, info } = await region.raw().toBuffer({ resolveWithObject: true });
|
|
31
33
|
// Контент лежит в (frame.x, frame.y); extrude-кайма выступает наружу на `extrude` px.
|
|
32
34
|
// Слева/сверху места достаточно: frame.x = boxX + (padding+extrude) ≥ extrude.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
copyRegion(pageData, page, data, info.width, info.height, frame.x - extrude, frame.y - extrude, frame.name);
|
|
36
|
+
}
|
|
37
|
+
return pageData;
|
|
38
|
+
}
|
|
39
|
+
/** Копирует сырой RGBA-регион в страницу построчно; регион обязан целиком лежать внутри страницы. */
|
|
40
|
+
function copyRegion(pageData, page, region, width, height, left, top, frameName) {
|
|
41
|
+
if (left < 0 || top < 0 || left + width > page.width || top + height > page.height) {
|
|
42
|
+
throw new Error(`composePage: frame "${frameName}" (${width}x${height} at ${left},${top}) is outside the ${page.width}x${page.height} page`);
|
|
43
|
+
}
|
|
44
|
+
const rowBytes = width * 4;
|
|
45
|
+
for (let row = 0; row < height; row++) {
|
|
46
|
+
const target = ((top + row) * page.width + left) * 4;
|
|
47
|
+
region.copy(pageData, target, row * rowBytes, row * rowBytes + rowBytes);
|
|
39
48
|
}
|
|
40
|
-
const base = sharp({
|
|
41
|
-
create: { width: page.width, height: page.height, channels: 4, background: { r: 0, g: 0, b: 0, alpha: 0 } },
|
|
42
|
-
});
|
|
43
|
-
const { data } = await base.composite(composites).raw().toBuffer({ resolveWithObject: true });
|
|
44
|
-
return data;
|
|
45
49
|
}
|
|
46
50
|
//# sourceMappingURL=compose.js.map
|
package/dist/compose.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -24,8 +24,8 @@ function prepare(images, opts) {
|
|
|
24
24
|
const trims = new Map();
|
|
25
25
|
for (const img of images) {
|
|
26
26
|
imageMap.set(img.name, img);
|
|
27
|
-
trims.set(img.name, opts.allowTrim
|
|
28
|
-
? trimAlphaBounds(img, opts.alphaThreshold)
|
|
27
|
+
trims.set(img.name, opts.allowTrim && img.allowTrim !== false
|
|
28
|
+
? trimAlphaBounds(img, opts.alphaThreshold, opts.trimMargin)
|
|
29
29
|
: { trimmed: false, trimX: 0, trimY: 0, w: img.width, h: img.height });
|
|
30
30
|
}
|
|
31
31
|
const groups = opts.detectIdentical
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAuB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAuB,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE9D,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAU/E,yFAAyF;AACzF,SAAS,OAAO,CAAC,MAAoB,EAAE,IAAiB;IACpD,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5B,KAAK,CAAC,GAAG,CACL,GAAG,CAAC,IAAI,EACR,IAAI,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/place.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place.d.ts","sourceRoot":"","sources":["../src/place.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG3D,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"place.d.ts","sourceRoot":"","sources":["../src/place.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG3D,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,CA8CvF"}
|
package/dist/place.js
CHANGED
|
@@ -32,32 +32,34 @@ export function placeFrames(inputs, options) {
|
|
|
32
32
|
return [];
|
|
33
33
|
const logics = [PACKING_LOGIC.MAX_EDGE, PACKING_LOGIC.MAX_AREA];
|
|
34
34
|
const rotationChoices = options.allowRotation ? [false, true] : [false];
|
|
35
|
-
const sourceArea = sorted.reduce((sum, i) => sum + i.w * i.h, 0);
|
|
36
35
|
let best = null;
|
|
36
|
+
let bestArea = Infinity;
|
|
37
37
|
let bestPages = Infinity;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
// Свип smart × logic × rotation, выбор по МИНИМУМУ суммарной площади страниц (= VRAM),
|
|
39
|
+
// при равенстве — по меньшему числу страниц. smart:true компактнее для одних папок,
|
|
40
|
+
// smart:false (полный бин) — для других (напр. не открывает лишнюю страницу); перебор берёт лучшее.
|
|
41
|
+
for (const smart of [true, false]) {
|
|
42
|
+
for (const logic of logics) {
|
|
43
|
+
for (const rot of rotationChoices) {
|
|
44
|
+
const placements = runPacker(sorted, options, logic, rot, smart, gutterHalf, g);
|
|
45
|
+
const pages = placements.length;
|
|
46
|
+
const sheetArea = placements.reduce((sum, p) => sum + p.width * p.height, 0);
|
|
47
|
+
if (sheetArea < bestArea || (sheetArea === bestArea && pages < bestPages)) {
|
|
48
|
+
best = placements;
|
|
49
|
+
bestArea = sheetArea;
|
|
50
|
+
bestPages = pages;
|
|
51
|
+
}
|
|
49
52
|
}
|
|
50
53
|
}
|
|
51
54
|
}
|
|
52
55
|
return best;
|
|
53
56
|
}
|
|
54
|
-
function runPacker(inputs, options, logic, allowRotation, gutterHalf, g) {
|
|
57
|
+
function runPacker(inputs, options, logic, allowRotation, smart, gutterHalf, g) {
|
|
55
58
|
const packer = new MaxRectsPacker(options.maxWidth, options.maxHeight, 0, {
|
|
56
|
-
// smart:
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
smart: false,
|
|
59
|
+
// smart перебирается в placeFrames: true = растим бин постепенно (плотнее для одних наборов),
|
|
60
|
+
// false = сразу полный бин maxWidth×maxHeight (не открывает лишнюю страницу для других).
|
|
61
|
+
// Размер страницы в любом случае считаем по контенту (NPOT shrink-wrap).
|
|
62
|
+
smart,
|
|
61
63
|
pot: false,
|
|
62
64
|
square: false,
|
|
63
65
|
allowRotation,
|
package/dist/place.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place.js","sourceRoot":"","sources":["../src/place.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAgBlD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,MAAwB,EAAE,OAAoB;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACrD,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;IAEzB,wDAAwD;IACxD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5F,qFAAqF;IACrF,4FAA4F;IAC5F,2FAA2F;IAC3F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YAClD,MAAM,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACrG,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAExE,
|
|
1
|
+
{"version":3,"file":"place.js","sourceRoot":"","sources":["../src/place.ts"],"names":[],"mappings":"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"}
|
package/dist/trim.d.ts
CHANGED
|
@@ -6,8 +6,10 @@ import type { InputImage, TrimResult } from './types.js';
|
|
|
6
6
|
* Инварианты (types.ts §1-2, §5): результат — в НЕповёрнутом пространстве исходника; при пороге 0
|
|
7
7
|
* трим lossless (срезаются только полностью прозрачные пиксели); полностью прозрачное изображение
|
|
8
8
|
* тримится в окно 1×1 (никогда 0×0 — нижестоящая геометрия предполагает непустые кадры).
|
|
9
|
+
* `margin` — сколько прозрачных пикселей оставить вокруг контента (не выходя за края исходника):
|
|
10
|
+
* при 1 линейная фильтрация на краю ведёт себя как у нетримленного спрайта.
|
|
9
11
|
*/
|
|
10
|
-
export declare function trimAlphaBounds(image: InputImage, alphaThreshold: number): TrimResult;
|
|
12
|
+
export declare function trimAlphaBounds(image: InputImage, alphaThreshold: number, margin?: number): TrimResult;
|
|
11
13
|
/**
|
|
12
14
|
* Стабильный контент-хэш тримленной области кадра — для detectIdentical.
|
|
13
15
|
* Хэшируется w×h + байты окна (trimX,trimY,w,h) поверх исходного буфера, без материализации.
|
package/dist/trim.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trim.d.ts","sourceRoot":"","sources":["../src/trim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"trim.d.ts","sourceRoot":"","sources":["../src/trim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,UAAU,CA6CjG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAkB7E"}
|
package/dist/trim.js
CHANGED
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
* Инварианты (types.ts §1-2, §5): результат — в НЕповёрнутом пространстве исходника; при пороге 0
|
|
6
6
|
* трим lossless (срезаются только полностью прозрачные пиксели); полностью прозрачное изображение
|
|
7
7
|
* тримится в окно 1×1 (никогда 0×0 — нижестоящая геометрия предполагает непустые кадры).
|
|
8
|
+
* `margin` — сколько прозрачных пикселей оставить вокруг контента (не выходя за края исходника):
|
|
9
|
+
* при 1 линейная фильтрация на краю ведёт себя как у нетримленного спрайта.
|
|
8
10
|
*/
|
|
9
|
-
export function trimAlphaBounds(image, alphaThreshold) {
|
|
11
|
+
export function trimAlphaBounds(image, alphaThreshold, margin = 0) {
|
|
10
12
|
const { data, width, height } = image;
|
|
11
13
|
const alphaAt = (x, y) => data[(y * width + x) * 4 + 3];
|
|
12
14
|
let top = -1;
|
|
@@ -54,10 +56,10 @@ export function trimAlphaBounds(image, alphaThreshold) {
|
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
|
-
const trimX = left;
|
|
58
|
-
const trimY = top;
|
|
59
|
-
const w = right -
|
|
60
|
-
const h = bottom -
|
|
59
|
+
const trimX = Math.max(0, left - margin);
|
|
60
|
+
const trimY = Math.max(0, top - margin);
|
|
61
|
+
const w = Math.min(width - 1, right + margin) - trimX + 1;
|
|
62
|
+
const h = Math.min(height - 1, bottom + margin) - trimY + 1;
|
|
61
63
|
const trimmed = trimX !== 0 || trimY !== 0 || w !== width || h !== height;
|
|
62
64
|
return { trimmed, trimX, trimY, w, h };
|
|
63
65
|
}
|
package/dist/trim.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trim.js","sourceRoot":"","sources":["../src/trim.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"trim.js","sourceRoot":"","sources":["../src/trim.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
* Emitters map it to `"rotated": true` (Pixi JSON) and `rotate: 270` (Spine .atlas) —
|
|
12
12
|
* the mapping is pinned by production Gamzix runtimes; never change one without the other.
|
|
13
13
|
* 4. Spine offsets are Y-up: `offsetY = sourceH - trimY - h` (bottom whitespace).
|
|
14
|
-
* 5. Trimming is lossless by default (`alphaThreshold: 0` — only fully transparent pixels removed
|
|
15
|
-
* so a trimmed build must render
|
|
14
|
+
* 5. Trimming is lossless by default (`alphaThreshold: 0` — only fully transparent pixels removed,
|
|
15
|
+
* `trimMargin: 1` — one transparent pixel kept around the content), so a trimmed build must render
|
|
16
|
+
* pixel-identically to an untrimmed one, also with linear filtering at any scale.
|
|
16
17
|
*/
|
|
17
18
|
/// <reference types="node" resolution-mode="require"/>
|
|
18
19
|
/// <reference types="node" resolution-mode="require"/>
|
|
@@ -24,6 +25,12 @@ export interface InputImage {
|
|
|
24
25
|
data: Buffer;
|
|
25
26
|
width: number;
|
|
26
27
|
height: number;
|
|
28
|
+
/**
|
|
29
|
+
* `false` keeps this image untrimmed even when `PackOptions.allowTrim` is on — for sprites whose runtime
|
|
30
|
+
* cannot use trim offsets (pixi-spine meshes map their UVs onto the trimmed frame). Default: follow the
|
|
31
|
+
* option.
|
|
32
|
+
*/
|
|
33
|
+
allowTrim?: boolean;
|
|
27
34
|
}
|
|
28
35
|
export interface PackOptions {
|
|
29
36
|
/** Max page dimensions (square), e.g. 4096. */
|
|
@@ -39,6 +46,12 @@ export interface PackOptions {
|
|
|
39
46
|
allowTrim: boolean;
|
|
40
47
|
/** Alpha value treated as "empty" during trim. 0 = lossless. */
|
|
41
48
|
alphaThreshold: number;
|
|
49
|
+
/**
|
|
50
|
+
* Transparent pixels kept around trimmed content (never past the source edge). With 1, linear filtering
|
|
51
|
+
* at the edge still fades into a transparent neighbour, as in the untrimmed sprite; with 0 the edge gets
|
|
52
|
+
* harder by half a texel, which shows when the sprite is scaled up. Default 1.
|
|
53
|
+
*/
|
|
54
|
+
trimMargin: number;
|
|
42
55
|
/** Collapse byte-identical inputs into one packed frame with aliases. */
|
|
43
56
|
detectIdentical: boolean;
|
|
44
57
|
/** Auto-pick the best max page size (see AutoSizeConfig). */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
* Emitters map it to `"rotated": true` (Pixi JSON) and `rotate: 270` (Spine .atlas) —
|
|
12
12
|
* the mapping is pinned by production Gamzix runtimes; never change one without the other.
|
|
13
13
|
* 4. Spine offsets are Y-up: `offsetY = sourceH - trimY - h` (bottom whitespace).
|
|
14
|
-
* 5. Trimming is lossless by default (`alphaThreshold: 0` — only fully transparent pixels removed
|
|
15
|
-
* so a trimmed build must render
|
|
14
|
+
* 5. Trimming is lossless by default (`alphaThreshold: 0` — only fully transparent pixels removed,
|
|
15
|
+
* `trimMargin: 1` — one transparent pixel kept around the content), so a trimmed build must render
|
|
16
|
+
* pixel-identically to an untrimmed one, also with linear filtering at any scale.
|
|
16
17
|
*/
|
|
17
18
|
export const DEFAULT_PACK_OPTIONS = {
|
|
18
19
|
maxWidth: 4096,
|
|
@@ -22,6 +23,7 @@ export const DEFAULT_PACK_OPTIONS = {
|
|
|
22
23
|
allowRotation: true,
|
|
23
24
|
allowTrim: false,
|
|
24
25
|
alphaThreshold: 0,
|
|
26
|
+
trimMargin: 1,
|
|
25
27
|
detectIdentical: true,
|
|
26
28
|
autoSize: { enabled: false, objective: 'vram', candidates: null },
|
|
27
29
|
};
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA+DH,MAAM,CAAC,MAAM,oBAAoB,GAA0B;IACvD,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,KAAK;IAChB,cAAc,EAAE,CAAC;IACjB,UAAU,EAAE,CAAC;IACb,eAAe,EAAE,IAAI;IACrB,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;CACpE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "asset-builder-packer",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Texture atlas packer for Pixi and Spine: sharp/libvips compositing, maxrects placement, typed Pixi spritesheet JSON and Spine .atlas emitters, first-class trim/rotation, deterministic output.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"type": "module",
|