signal-desktop/ts/util/processImageFile.ts

32 lines
1 KiB
TypeScript
Raw Normal View History

2021-08-06 00:17:05 +00:00
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { LoadImageOptions } from 'blueimp-load-image';
import loadImage from 'blueimp-load-image';
2021-09-24 00:49:05 +00:00
import { canvasToBytes } from './canvasToBytes';
2021-08-06 00:17:05 +00:00
2021-09-24 00:49:05 +00:00
export async function processImageFile(file: File): Promise<Uint8Array> {
2021-08-06 00:17:05 +00:00
const { image } = await loadImage(file, {
canvas: true,
cover: true,
crop: true,
imageSmoothingQuality: 'medium',
maxHeight: 512,
maxWidth: 512,
minHeight: 2,
minWidth: 2,
// `imageSmoothingQuality` is not present in `loadImage`'s types, but it is
// documented and supported. Updating DefinitelyTyped is the long-term solution
// here.
} as LoadImageOptions);
// NOTE: The types for `loadImage` say this can never be a canvas, but it will be if
// `canvas: true`, at least in our case. Again, updating DefinitelyTyped should
// address this.
if (!(image instanceof HTMLCanvasElement)) {
throw new Error('Loaded image was not a canvas');
}
2021-09-24 00:49:05 +00:00
return canvasToBytes(image);
2021-08-06 00:17:05 +00:00
}