Compare commits

...

4 Commits

Author SHA1 Message Date
Arnošt Pleskot
b3d95d9307
feat: use upng 2023-06-16 23:49:28 +02:00
Arnošt Pleskot
671ed94d74
chore: add timers 2023-06-16 23:42:45 +02:00
Arnošt Pleskot
d5ac76d4ea
feat: working export with pngjs 2023-06-16 22:36:24 +02:00
Arnošt Pleskot
2b19d53549
feat: init of generating blobs in chunk 2023-06-14 11:52:16 +02:00
4 changed files with 44 additions and 4 deletions

View File

@ -53,6 +53,7 @@
"sass": "1.51.0",
"socket.io-client": "2.3.1",
"tunnel-rat": "0.1.2",
"upng-js": "2.1.0",
"workbox-background-sync": "^6.5.4",
"workbox-broadcast-update": "^6.5.4",
"workbox-cacheable-response": "^6.5.4",
@ -78,6 +79,7 @@
"@types/react-dom": "18.0.6",
"@types/resize-observer-browser": "0.1.7",
"@types/socket.io-client": "1.4.36",
"@types/upng-js": "2.1.2",
"chai": "4.3.6",
"dotenv": "16.0.1",
"eslint-config-prettier": "8.5.0",

View File

@ -13,6 +13,7 @@ import { FileSystemHandle, nativeFileSystemSupported } from "./filesystem";
import { isValidExcalidrawData, isValidLibrary } from "./json";
import { restore, restoreLibraryItems } from "./restore";
import { ImportedLibraryData } from "./types";
import UPNG from "upng-js";
const parseFileContents = async (blob: Blob | File) => {
let contents: string;
@ -210,9 +211,7 @@ export const loadLibraryFromBlob = async (
return parseLibraryJSON(await parseFileContents(blob), defaultStatus);
};
export const canvasToBlob = async (
canvas: HTMLCanvasElement,
): Promise<Blob> => {
const _canvasToBlob = async (canvas: HTMLCanvasElement): Promise<Blob> => {
return new Promise((resolve, reject) => {
try {
canvas.toBlob((blob) => {
@ -232,6 +231,31 @@ export const canvasToBlob = async (
});
};
export const canvasToBlob = async (
canvas: HTMLCanvasElement,
): Promise<Blob> => {
const ctx = canvas.getContext("2d");
if (!ctx) {
throw new Error("No canvas context");
}
console.time("getImageData");
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
console.timeEnd("getImageData");
console.time("encode");
const pngData = UPNG.encode(
[imageData.buffer],
canvas.width,
canvas.height,
0,
);
console.timeEnd("encode");
return new Blob([pngData], { type: "image/png" });
};
/** generates SHA-1 digest from supplied file (if not supported, falls back
to a 40-char base64 random id) */
export const generateIdFromFile = async (file: File): Promise<FileId> => {

View File

@ -75,7 +75,9 @@ export const exportCanvas = async (
document.body.appendChild(tempCanvas);
if (type === "png") {
console.time("export png");
let blob = await canvasToBlob(tempCanvas);
console.timeEnd("export png");
tempCanvas.remove();
if (appState.exportEmbedScene) {
blob = await (

View File

@ -2851,6 +2851,11 @@
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311"
integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==
"@types/upng-js@2.1.2":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@types/upng-js/-/upng-js-2.1.2.tgz#4680f700c3003eaf958b92418c6e19521bb1e034"
integrity sha512-sxCnLDEmGFDcnrdSMml3/mDSbfSAvt86Ld32J6Ac75Og7GzzmwHbUnJNTue74tfQC/3PPD/W0jG2dQuF9v6UOg==
"@types/ws@^8.5.1":
version "8.5.4"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5"
@ -8034,7 +8039,7 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
pako@1.0.11:
pako@1.0.11, pako@^1.0.5:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
@ -10557,6 +10562,13 @@ update-browserslist-db@^1.0.10:
escalade "^3.1.1"
picocolors "^1.0.0"
upng-js@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/upng-js/-/upng-js-2.1.0.tgz#7176e73973db361ca95d0fa14f958385db6b9dd2"
integrity sha512-d3xzZzpMP64YkjP5pr8gNyvBt7dLk/uGI67EctzDuVp4lCZyVMo0aJO6l/VDlgbInJYDY6cnClLoBp29eKWI6g==
dependencies:
pako "^1.0.5"
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"