mirror of
https://github.com/lovell/sharp.git
synced 2026-02-04 13:46:19 +01:00
Add toUint8Array for output backed by transferable ArrayBuffer #4355
This commit is contained in:
@@ -7,6 +7,7 @@ const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const { afterEach, beforeEach, describe, it } = require('node:test');
|
||||
const assert = require('node:assert');
|
||||
const { isMarkedAsUntransferable } = require('node:worker_threads');
|
||||
|
||||
const sharp = require('../../');
|
||||
const fixtures = require('../fixtures');
|
||||
@@ -1092,4 +1093,39 @@ describe('Input/output', () => {
|
||||
assert.strictEqual(channels, 3);
|
||||
assert.strictEqual(format, 'jpeg');
|
||||
});
|
||||
|
||||
it('toBuffer resolves with an untransferable Buffer', async () => {
|
||||
const data = await sharp(fixtures.inputJpg)
|
||||
.resize({ width: 8, height: 8 })
|
||||
.toBuffer();
|
||||
|
||||
if (isMarkedAsUntransferable) {
|
||||
assert.strictEqual(isMarkedAsUntransferable(data.buffer), true);
|
||||
}
|
||||
assert.strictEqual(ArrayBuffer.isView(data), true);
|
||||
assert.strictEqual(ArrayBuffer.isView(data.buffer), false);
|
||||
});
|
||||
|
||||
it('toUint8Array resolves with a transferable Uint8Array', async () => {
|
||||
const { data, info } = await sharp(fixtures.inputJpg)
|
||||
.resize({ width: 8, height: 8 })
|
||||
.toUint8Array();
|
||||
|
||||
assert.strictEqual(data instanceof Uint8Array, true);
|
||||
if (isMarkedAsUntransferable) {
|
||||
assert.strictEqual(isMarkedAsUntransferable(data.buffer), false);
|
||||
}
|
||||
assert.strictEqual(ArrayBuffer.isView(data), true);
|
||||
assert.strictEqual(info.format, 'jpeg');
|
||||
assert.strictEqual(info.width, 8);
|
||||
assert.strictEqual(info.height, 8);
|
||||
assert.strictEqual(data.byteLength, info.size);
|
||||
assert.strictEqual(data[0], 0xFF);
|
||||
assert.strictEqual(data[1], 0xD8);
|
||||
|
||||
const metadata = await sharp(data).metadata();
|
||||
assert.strictEqual(metadata.format, 'jpeg');
|
||||
assert.strictEqual(metadata.width, 8);
|
||||
assert.strictEqual(metadata.height, 8);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user