feat: set appState.exportBackground to true when exporting to jpg (#4342)

This commit is contained in:
David Luzar 2021-11-30 22:08:55 +01:00 committed by GitHub
parent 1ee8d7d082
commit afa7932c9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 2 deletions

View File

@ -13,6 +13,10 @@ Please add the latest change on the top under the correct section.
## Unreleased
## Excalidraw API
- [`exportToBlob`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#exportToBlob) now automatically sets `appState.exportBackground` to `true` if exporting to `image/jpeg` MIME type (to ensure that alpha channel is not compressed to black color).
### Features
- #### BREAKING CHANGE

View File

@ -828,6 +828,8 @@ import { exportToBlob } from "@excalidraw/excalidraw";
Returns a promise which resolves with a [blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob). It internally uses [canvas.ToBlob](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob).
Note: `appState.exportBackground` is always set to `true` if exporting to `image/jpeg` to ensure the alpha channel isn't compressed to black.
#### `exportToSvg`
**_Signature_**

View File

@ -80,8 +80,6 @@ export const exportToBlob = async (
quality?: number;
},
): Promise<Blob | null> => {
const canvas = await exportToCanvas(opts);
let { mimeType = MIME_TYPES.png, quality } = opts;
if (mimeType === MIME_TYPES.png && typeof quality === "number") {
@ -93,6 +91,18 @@ export const exportToBlob = async (
mimeType = MIME_TYPES.jpg;
}
if (mimeType === MIME_TYPES.jpg && !opts.appState?.exportBackground) {
console.warn(
`Defaulting "exportBackground" to "true" for "${MIME_TYPES.jpg}" mimeType`,
);
opts = {
...opts,
appState: { ...opts.appState, exportBackground: true },
};
}
const canvas = await exportToCanvas(opts);
quality = quality ? quality : /image\/jpe?g/.test(mimeType) ? 0.92 : 0.8;
return new Promise((resolve) => {

View File

@ -42,6 +42,9 @@ describe("exportToBlob", () => {
getDimensions: (width, height) => ({ width, height, scale: 1 }),
// testing typo in MIME type (jpg → jpeg)
mimeType: "image/jpg",
appState: {
exportBackground: true,
},
});
expect(blob?.type).toBe(MIME_TYPES.jpg);
});