@sns-parse/core 0.4.0-alpha.8 → 0.4.0-alpha.9
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/lib/utils/merge.d.ts +3 -1
- package/lib/utils/merge.js +14 -3
- package/package.json +1 -1
package/lib/utils/merge.d.ts
CHANGED
|
@@ -28,7 +28,9 @@ export interface SeamVerdict {
|
|
|
28
28
|
/** 结论文案 */
|
|
29
29
|
reason: string;
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/** 内容验证:所有接缝(趋势+纹理)均通过才成立;允许至多一条「边界容差缝」
|
|
32
|
+
* (比值 ∈ [3,5),其余全部通过——平台独立重压缩的典型错位幅度;平坦不可验证缝不参与容差)。
|
|
33
|
+
* 返回最大接缝比值与逐缝证据。 */
|
|
32
34
|
export declare function verifyLayout(layout: MergeLayout, grays: Buffer[]): {
|
|
33
35
|
pass: boolean;
|
|
34
36
|
score: number;
|
package/lib/utils/merge.js
CHANGED
|
@@ -37,6 +37,10 @@ const COL_LEN = 64;
|
|
|
37
37
|
/** 接缝差异 / 内部自然差异 的判定阈值(母图切片 ≈1,无关图片 ≫1;下限 3 防平坦图除零) */
|
|
38
38
|
const BOUNDARY_THRESH = 3.0;
|
|
39
39
|
const MAD_FLOOR = 3.0;
|
|
40
|
+
/** 单缝边界容差:平台(如 X)对各分片独立重压缩会让个别接缝低频轻微错位;
|
|
41
|
+
* 其余接缝全部通过且仅一条落在 [BOUNDARY_THRESH, BORDERLINE_THRESH) 时放行 */
|
|
42
|
+
const BORDERLINE_THRESH = 5.0;
|
|
43
|
+
const BORDERLINE_MAX = 1;
|
|
40
44
|
/** 边界带纹理能量下限:低于此值视为「不可验证接缝」(相似背景/平边照片会骗过亮度对比) */
|
|
41
45
|
const TEXTURE_MIN = 4.0;
|
|
42
46
|
/* ---------- 尺寸候选 ---------- */
|
|
@@ -184,7 +188,9 @@ function seamVerdictH(a, b, from, to) {
|
|
|
184
188
|
[colOf(b, 2), colOf(b, 1)],
|
|
185
189
|
]);
|
|
186
190
|
}
|
|
187
|
-
/**
|
|
191
|
+
/** 内容验证:所有接缝(趋势+纹理)均通过才成立;允许至多一条「边界容差缝」
|
|
192
|
+
* (比值 ∈ [3,5),其余全部通过——平台独立重压缩的典型错位幅度;平坦不可验证缝不参与容差)。
|
|
193
|
+
* 返回最大接缝比值与逐缝证据。 */
|
|
188
194
|
function verifyLayout(layout, grays) {
|
|
189
195
|
const seams = [];
|
|
190
196
|
const n = grays.length;
|
|
@@ -208,7 +214,11 @@ function verifyLayout(layout, grays) {
|
|
|
208
214
|
if (!seams.length)
|
|
209
215
|
return { pass: false, score: Infinity, seams };
|
|
210
216
|
const worst = Math.max(...seams.map((v) => v.score));
|
|
211
|
-
|
|
217
|
+
const failed = seams.filter((v) => !v.ok);
|
|
218
|
+
const borderline = failed.filter((v) => v.score < BORDERLINE_THRESH);
|
|
219
|
+
const pass = seams.every((v) => v.ok)
|
|
220
|
+
|| (borderline.length <= BORDERLINE_MAX && failed.length === borderline.length);
|
|
221
|
+
return { pass, score: worst, seams };
|
|
212
222
|
}
|
|
213
223
|
/** 内容识别:候选布局逐一经接缝连续性验证,取通过者中比值最小的一个 */
|
|
214
224
|
function detectMergeLayout(sizes, grays) {
|
|
@@ -232,8 +242,9 @@ function pickMergeLayout(sizes, grays) {
|
|
|
232
242
|
let best = null;
|
|
233
243
|
for (const c of candidates) {
|
|
234
244
|
const { pass, score, seams } = verifyLayout(c, grays);
|
|
245
|
+
const tolerated = seams.filter((v) => !v.ok).length;
|
|
235
246
|
const detail = seams.map((v) => `[${v.dir === 'V' ? '竖' : '横'}缝 ${v.from}→${v.to}] ${v.reason}`).join(';');
|
|
236
|
-
(0, logger_1.debugLog)(`同源合并证据·${layoutName(c)}:${pass ? '通过' : '拒绝'},worst=${score === Infinity ? '∞' : score.toFixed(2)} ⟶ ${detail}`);
|
|
247
|
+
(0, logger_1.debugLog)(`同源合并证据·${layoutName(c)}:${pass ? '通过' : '拒绝'}${pass && tolerated ? `(含 ${tolerated} 条边界容差缝)` : ''},worst=${score === Infinity ? '∞' : score.toFixed(2)} ⟶ ${detail}`);
|
|
237
248
|
if (pass && (!best || score < best.score))
|
|
238
249
|
best = { layout: c, score, seams };
|
|
239
250
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sns-parse/core",
|
|
3
|
-
"version": "0.4.0-alpha.
|
|
3
|
+
"version": "0.4.0-alpha.9+upstream.1.6.7",
|
|
4
4
|
"description": "sns-parse 核心:契约、宿主抽象、配置 DSL 与解析引擎(fetcher/parser/翻译/X 原生解析/合并/GIF/TLS 指纹客户端)",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|