98545d74d1
底部工具栏上传图片后直接创建画布图层 上传图片在创建素材和图层前读取原始分辨率 补充上传尺寸解析与素材库集成回归测试 同步图片画布上传语义文档和共享决策记录
143 lines
3.0 KiB
TypeScript
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,
|
|
});
|
|
});
|
|
});
|