mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
Add support for ArrayBuffer input (#3548)
This commit is contained in:
parent
4798d9da64
commit
9608f219bd
@ -113,8 +113,8 @@ const debuglog = util.debuglog('sharp');
|
|||||||
* }
|
* }
|
||||||
* }).toFile('text_rgba.png');
|
* }).toFile('text_rgba.png');
|
||||||
*
|
*
|
||||||
* @param {(Buffer|Uint8Array|Uint8ClampedArray|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array|Float64Array|string)} [input] - if present, can be
|
* @param {(Buffer|ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array|Float64Array|string)} [input] - if present, can be
|
||||||
* a Buffer / Uint8Array / Uint8ClampedArray containing JPEG, PNG, WebP, AVIF, GIF, SVG or TIFF image data, or
|
* a Buffer / ArrayBuffer / Uint8Array / Uint8ClampedArray containing JPEG, PNG, WebP, AVIF, GIF, SVG or TIFF image data, or
|
||||||
* a TypedArray containing raw pixel image data, or
|
* a TypedArray containing raw pixel image data, or
|
||||||
* a String containing the filesystem path to an JPEG, PNG, WebP, AVIF, GIF, SVG or TIFF image file.
|
* a String containing the filesystem path to an JPEG, PNG, WebP, AVIF, GIF, SVG or TIFF image file.
|
||||||
* JPEG, PNG, WebP, AVIF, GIF, SVG, TIFF or raw pixel image data can be streamed into the object when not present.
|
* JPEG, PNG, WebP, AVIF, GIF, SVG, TIFF or raw pixel image data can be streamed into the object when not present.
|
||||||
|
1
lib/index.d.ts
vendored
1
lib/index.d.ts
vendored
@ -29,6 +29,7 @@ declare function sharp(options?: sharp.SharpOptions): sharp.Sharp;
|
|||||||
declare function sharp(
|
declare function sharp(
|
||||||
input?:
|
input?:
|
||||||
| Buffer
|
| Buffer
|
||||||
|
| ArrayBuffer
|
||||||
| Uint8Array
|
| Uint8Array
|
||||||
| Uint8ClampedArray
|
| Uint8ClampedArray
|
||||||
| Int8Array
|
| Int8Array
|
||||||
|
@ -47,6 +47,11 @@ function _createInputDescriptor (input, inputOptions, containerOptions) {
|
|||||||
throw Error('Input Buffer is empty');
|
throw Error('Input Buffer is empty');
|
||||||
}
|
}
|
||||||
inputDescriptor.buffer = input;
|
inputDescriptor.buffer = input;
|
||||||
|
} else if (is.arrayBuffer(input)) {
|
||||||
|
if (input.byteLength === 0) {
|
||||||
|
throw Error('Input bit Array is empty');
|
||||||
|
}
|
||||||
|
inputDescriptor.buffer = Buffer.from(input, 0, input.byteLength);
|
||||||
} else if (is.typedArray(input)) {
|
} else if (is.typedArray(input)) {
|
||||||
if (input.length === 0) {
|
if (input.length === 0) {
|
||||||
throw Error('Input Bit Array is empty');
|
throw Error('Input Bit Array is empty');
|
||||||
|
@ -71,6 +71,14 @@ const typedArray = function (val) {
|
|||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this value an ArrayBuffer object?
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
const arrayBuffer = function (val) {
|
||||||
|
return val instanceof ArrayBuffer;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is this value a non-empty string?
|
* Is this value a non-empty string?
|
||||||
* @private
|
* @private
|
||||||
@ -134,6 +142,7 @@ module.exports = {
|
|||||||
bool: bool,
|
bool: bool,
|
||||||
buffer: buffer,
|
buffer: buffer,
|
||||||
typedArray: typedArray,
|
typedArray: typedArray,
|
||||||
|
arrayBuffer: arrayBuffer,
|
||||||
string: string,
|
string: string,
|
||||||
number: number,
|
number: number,
|
||||||
integer: integer,
|
integer: integer,
|
||||||
|
@ -150,6 +150,23 @@ describe('Input/output', function () {
|
|||||||
readable.pipe(pipeline).pipe(writable);
|
readable.pipe(pipeline).pipe(writable);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Read from ArrayBuffer and write to Buffer', async () => {
|
||||||
|
const uint8array = Uint8Array.from([255, 255, 255, 0, 0, 0]);
|
||||||
|
const arrayBuffer = new ArrayBuffer(uint8array.byteLength);
|
||||||
|
new Uint8Array(arrayBuffer).set(uint8array);
|
||||||
|
const { data, info } = await sharp(arrayBuffer, {
|
||||||
|
raw: {
|
||||||
|
width: 2,
|
||||||
|
height: 1,
|
||||||
|
channels: 3
|
||||||
|
}
|
||||||
|
}).toBuffer({ resolveWithObject: true });
|
||||||
|
|
||||||
|
assert.deepStrictEqual(uint8array, new Uint8Array(data));
|
||||||
|
assert.strictEqual(info.width, 2);
|
||||||
|
assert.strictEqual(info.height, 1);
|
||||||
|
});
|
||||||
|
|
||||||
it('Read from Uint8Array and write to Buffer', async () => {
|
it('Read from Uint8Array and write to Buffer', async () => {
|
||||||
const uint8array = Uint8Array.from([255, 255, 255, 0, 0, 0]);
|
const uint8array = Uint8Array.from([255, 255, 255, 0, 0, 0]);
|
||||||
const { data, info } = await sharp(uint8array, {
|
const { data, info } = await sharp(uint8array, {
|
||||||
|
@ -11,6 +11,9 @@ describe('Raw pixel data', function () {
|
|||||||
assert.throws(function () {
|
assert.throws(function () {
|
||||||
sharp(Buffer.from(''));
|
sharp(Buffer.from(''));
|
||||||
}, /empty/);
|
}, /empty/);
|
||||||
|
assert.throws(function () {
|
||||||
|
sharp(new ArrayBuffer(0));
|
||||||
|
}, /empty/);
|
||||||
assert.throws(function () {
|
assert.throws(function () {
|
||||||
sharp(new Uint8Array(0));
|
sharp(new Uint8Array(0));
|
||||||
}, /empty/);
|
}, /empty/);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user