Files
Genarrative/src/components/image-editor/ImageCanvasFileModel.test.ts
T
kdletters 98545d74d1 修复画布底部上传入画布尺寸
底部工具栏上传图片后直接创建画布图层

上传图片在创建素材和图层前读取原始分辨率

补充上传尺寸解析与素材库集成回归测试

同步图片画布上传语义文档和共享决策记录
2026-06-19 17:36:20 +08:00

143 lines
3.0 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { probeImageFileDimensions } from './ImageCanvasFileModel';
function makeFile(bytes: number[], name: string, type: string) {
return new File([new Uint8Array(bytes)], name, { type });
}
function uint16be(value: number) {
return [(value >> 8) & 0xff, value & 0xff];
}
function uint32be(value: number) {
return [
(value >> 24) & 0xff,
(value >> 16) & 0xff,
(value >> 8) & 0xff,
value & 0xff,
];
}
function uint16le(value: number) {
return [value & 0xff, (value >> 8) & 0xff];
}
function uint24le(value: number) {
return [value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff];
}
function uint32le(value: number) {
return [
value & 0xff,
(value >> 8) & 0xff,
(value >> 16) & 0xff,
(value >> 24) & 0xff,
];
}
describe('ImageCanvasFileModel', () => {
it('probes common upload image dimensions from file headers', async () => {
const png = makeFile(
[
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
...uint32be(13),
0x49, 0x48, 0x44, 0x52,
...uint32be(1536),
...uint32be(1024),
8,
6,
0,
0,
0,
],
'画布.png',
'image/png',
);
const jpeg = makeFile(
[
0xff, 0xd8,
0xff, 0xe0,
...uint16be(16),
0x4a, 0x46, 0x49, 0x46,
0, 1, 1, 0, 0, 1, 0, 1, 0, 0,
0xff, 0xc0,
...uint16be(17),
8,
...uint16be(720),
...uint16be(1280),
3,
0, 0, 0, 0, 0, 0, 0, 0, 0,
],
'画布.jpg',
'image/jpeg',
);
const gif = makeFile(
[
0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
...uint16le(640),
...uint16le(480),
0,
0,
0,
],
'画布.gif',
'image/gif',
);
const webp = makeFile(
[
0x52, 0x49, 0x46, 0x46,
...uint32le(22),
0x57, 0x45, 0x42, 0x50,
0x56, 0x50, 0x38, 0x58,
...uint32le(10),
0,
0,
0,
0,
...uint24le(799),
...uint24le(599),
],
'画布.webp',
'image/webp',
);
const bmp = makeFile(
[
0x42, 0x4d,
...uint32le(54),
0,
0,
0,
0,
...uint32le(54),
...uint32le(40),
...uint32le(300),
...uint32le(200),
],
'画布.bmp',
'image/bmp',
);
await expect(probeImageFileDimensions(png)).resolves.toEqual({
width: 1536,
height: 1024,
});
await expect(probeImageFileDimensions(jpeg)).resolves.toEqual({
width: 1280,
height: 720,
});
await expect(probeImageFileDimensions(gif)).resolves.toEqual({
width: 640,
height: 480,
});
await expect(probeImageFileDimensions(webp)).resolves.toEqual({
width: 800,
height: 600,
});
await expect(probeImageFileDimensions(bmp)).resolves.toEqual({
width: 300,
height: 200,
});
});
});