feat: 完善视频任务与 KOC 资源库
This commit is contained in:
98
tests/workbook-image.test.mjs
Normal file
98
tests/workbook-image.test.mjs
Normal file
@@ -0,0 +1,98 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
import sharp from "sharp";
|
||||
import { normalizeWorkbookImage } from "../lib/workbook-image.ts";
|
||||
|
||||
test("bakes EXIF orientation into exported workbook image pixels", async () => {
|
||||
const source = await sharp({
|
||||
create: {
|
||||
width: 8,
|
||||
height: 4,
|
||||
channels: 3,
|
||||
background: "#e95420",
|
||||
},
|
||||
})
|
||||
.jpeg()
|
||||
.withMetadata({ orientation: 6 })
|
||||
.toBuffer();
|
||||
|
||||
const normalized = await normalizeWorkbookImage({
|
||||
bytes: new Uint8Array(source),
|
||||
contentType: "image/jpeg",
|
||||
width: 8,
|
||||
height: 4,
|
||||
description: "手机照片",
|
||||
});
|
||||
const metadata = await sharp(normalized.bytes).metadata();
|
||||
|
||||
assert.equal(normalized.contentType, "image/png");
|
||||
assert.equal(normalized.width, 4);
|
||||
assert.equal(normalized.height, 8);
|
||||
assert.equal(metadata.width, 4);
|
||||
assert.equal(metadata.height, 8);
|
||||
assert.equal(metadata.orientation, undefined);
|
||||
});
|
||||
|
||||
test("keeps unsupported image bytes unchanged", async () => {
|
||||
const bytes = Uint8Array.from([1, 2, 3]);
|
||||
const normalized = await normalizeWorkbookImage({
|
||||
bytes,
|
||||
contentType: "application/octet-stream",
|
||||
description: "未知文件",
|
||||
});
|
||||
assert.equal(normalized.bytes, bytes);
|
||||
assert.equal(normalized.contentType, "application/octet-stream");
|
||||
});
|
||||
|
||||
test("normalizes recognizable images even when storage metadata has no image MIME type", async () => {
|
||||
const source = await sharp({
|
||||
create: {
|
||||
width: 8,
|
||||
height: 4,
|
||||
channels: 3,
|
||||
background: "#22c55e",
|
||||
},
|
||||
})
|
||||
.jpeg()
|
||||
.withMetadata({ orientation: 6 })
|
||||
.toBuffer();
|
||||
const normalized = await normalizeWorkbookImage({
|
||||
bytes: new Uint8Array(source),
|
||||
contentType: "application/octet-stream",
|
||||
description: "方向元数据缺失测试",
|
||||
});
|
||||
|
||||
assert.equal(normalized.contentType, "image/png");
|
||||
assert.equal(normalized.width, 4);
|
||||
assert.equal(normalized.height, 8);
|
||||
});
|
||||
|
||||
test("can downsize full-resolution source images for compact workbook exports", async () => {
|
||||
const source = await sharp({
|
||||
create: {
|
||||
width: 4000,
|
||||
height: 3000,
|
||||
channels: 3,
|
||||
background: "#d4a72c",
|
||||
},
|
||||
})
|
||||
.png({ compressionLevel: 0 })
|
||||
.toBuffer();
|
||||
const normalized = await normalizeWorkbookImage(
|
||||
{
|
||||
bytes: new Uint8Array(source),
|
||||
contentType: "image/png",
|
||||
width: 4000,
|
||||
height: 3000,
|
||||
description: "批量回填原图",
|
||||
},
|
||||
{ maxDimension: 1600, outputFormat: "jpeg", jpegQuality: 82 },
|
||||
);
|
||||
const metadata = await sharp(normalized.bytes).metadata();
|
||||
|
||||
assert.equal(normalized.contentType, "image/jpeg");
|
||||
assert.equal(normalized.width, 1600);
|
||||
assert.equal(normalized.height, 1200);
|
||||
assert.equal(metadata.format, "jpeg");
|
||||
assert.ok(normalized.bytes.byteLength < source.byteLength / 20);
|
||||
});
|
||||
Reference in New Issue
Block a user