Use full CanvasKit build for JPEG/WEBP encoding support

The default canvaskit.wasm doesn't include JPEG/WEBP encoders
(encodeToBytes returns null). The full build is only ~1MB larger.
This commit is contained in:
Danila Poyarkov 2026-03-01 00:09:35 +03:00
parent 7a5a77c098
commit 7d4b821e77
3 changed files with 10 additions and 3 deletions

View file

@ -87,8 +87,12 @@ export function renderNodesToImage(
surface.flush()
const image = surface.makeImageSnapshot()
const quality = options.quality ?? defaultQuality(options.format)
const encoded = image.encodeToBytes(ckImageFormat(ck, options.format), quality)
const fmt = ckImageFormat(ck, options.format)
const encoded = image.encodeToBytes(fmt, quality)
image.delete()
if (!encoded) {
console.error(`encodeToBytes returned null for format=${options.format} quality=${quality}`)
}
return encoded ? new Uint8Array(encoded) : null
} finally {
surface.delete()

View file

@ -620,7 +620,10 @@ export function createEditorStore() {
async function exportSelection(scale: number, format: ExportFormat) {
const ids = [...state.selectedIds]
const data = renderExportImage(ids, scale, format)
if (!data) return
if (!data) {
console.error(`Export failed: renderExportImage returned null for format=${format} scale=${scale}`)
return
}
const node = ids.length === 1 ? graph.getNode(ids[0]) : undefined
const baseName = node?.name ?? 'Export'

View file

@ -21,7 +21,7 @@ export default defineConfig(async () => ({
{
name: 'copy-canvaskit-wasm',
buildStart() {
const src = 'node_modules/canvaskit-wasm/bin/canvaskit.wasm'
const src = 'node_modules/canvaskit-wasm/bin/full/canvaskit.wasm'
const dest = 'public/canvaskit.wasm'
if (existsSync(src) && !existsSync(dest)) {
copyFileSync(src, dest)