99a4ea6e9a
This pull request removes the native `sharp` dependency (which doesn't work on some Linux variants, nor **M1 Mac**) and replaces it with a wasm equivalent. It also reduces Next.js' installed size by 27.3 MB. The code is adapted from the [Squoosh CLI](https://github.com/GoogleChromeLabs/squoosh). This PR still supports: - Rotation normalization - Resizing - PNG - JPEG - Webp However, it (temporarily) removes support for: - Resizing Gifs - Resizing Tiff (these formats still get served and rendered correctly by the image component) --- Fixes #20456 Closes #20738 Closes #21762
33 lines
820 B
TypeScript
33 lines
820 B
TypeScript
export default class ImageData {
|
|
static from(input: ImageData): ImageData {
|
|
return new ImageData(input.data || input._data, input.width, input.height)
|
|
}
|
|
|
|
private _data: Buffer | Uint8Array | Uint8ClampedArray
|
|
width: number
|
|
height: number
|
|
|
|
get data(): Buffer {
|
|
if (Object.prototype.toString.call(this._data) === '[object Object]') {
|
|
return Buffer.from(Object.values(this._data))
|
|
}
|
|
if (
|
|
this._data instanceof Buffer ||
|
|
this._data instanceof Uint8Array ||
|
|
this._data instanceof Uint8ClampedArray
|
|
) {
|
|
return Buffer.from(this._data)
|
|
}
|
|
throw new Error('invariant')
|
|
}
|
|
|
|
constructor(
|
|
data: Buffer | Uint8Array | Uint8ClampedArray,
|
|
width: number,
|
|
height: number
|
|
) {
|
|
this._data = data
|
|
this.width = width
|
|
this.height = height
|
|
}
|
|
}
|