From 55aa35837c1bcebab03d8814f1efb97f06ec0dd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=9B?= Date: Mon, 27 Jul 2026 18:18:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=83=8C=E6=99=AF=E8=89=B2=E4=BC=98?= =?UTF-8?q?=E5=85=88=E7=94=A8=20canvas=20=E5=AE=9E=E9=99=85=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=EF=BC=8C=E4=B8=8D=E9=9D=A0=E6=96=87=E5=AD=97=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E6=8E=A8=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优先级:styles.backgroundColor → canvas.backgroundColor → 文字颜色推断 --- convert-w2p.js | 20 +++++++------------- web-to-ppt/convert-browser.js | 13 +++++++------ 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/convert-w2p.js b/convert-w2p.js index a3fae21..644b3be 100644 --- a/convert-w2p.js +++ b/convert-w2p.js @@ -521,7 +521,12 @@ async function convert(input) { if (hex) slideBg = { color: hex }; } } - // fallback:从 slide 容器的文字颜色反推背景 + // fallback:canvas 背景色(实际页面背景色) + if (!slideBg && canvas.backgroundColor && canvas.backgroundColor !== 'rgba(0, 0, 0, 0)') { + const canvasHex = rgbaToHex(canvas.backgroundColor); + if (canvasHex) slideBg = { color: canvasHex }; + } + // fallback:从文字颜色推断 if (!slideBg && slideContainer && slideContainer.styles) { const textColor = slideContainer.styles.color; if (textColor) { @@ -531,21 +536,10 @@ async function convert(input) { const g = parseInt(tc.slice(2,4), 16); const b = parseInt(tc.slice(4,6), 16); const lum = (r * 299 + g * 587 + b * 114) / 1000; - // 浅色文字 → 深色背景(用 canvas 背景色),深色文字 → 浅色背景(取反) - if (lum > 128) { - const canvasBg = canvas.backgroundColor ? rgbaToHex(canvas.backgroundColor) : null; - slideBg = { color: canvasBg || '1A1A1A' }; - } else { - slideBg = { color: 'FAFAFA' }; - } + slideBg = lum > 128 ? { color: '1A1A1A' } : { color: 'FAFAFA' }; } } } - // fallback:从 canvas 背景色兜底(最后手段) - if (!slideBg && canvas.backgroundColor && canvas.backgroundColor !== 'rgba(0, 0, 0, 0)') { - const hex = rgbaToHex(canvas.backgroundColor); - if (hex) slideBg = { color: hex }; - } console.log('处理 ' + sg.name + ': ' + sg.children.length + ' 个节点'); diff --git a/web-to-ppt/convert-browser.js b/web-to-ppt/convert-browser.js index 479536a..1864806 100644 --- a/web-to-ppt/convert-browser.js +++ b/web-to-ppt/convert-browser.js @@ -220,6 +220,12 @@ async function convertToPptx(input, onProgress) { if (hex) slideBg = { color: hex }; } } + // fallback:canvas 背景色(实际页面背景色) + if (!slideBg && canvas.backgroundColor && canvas.backgroundColor !== 'rgba(0, 0, 0, 0)') { + const canvasHex = rgbaToHex(canvas.backgroundColor); + if (canvasHex) slideBg = { color: canvasHex }; + } + // fallback:从文字颜色推断 if (!slideBg && slideNode?.styles) { const textColor = slideNode.styles.color; if (textColor) { @@ -229,12 +235,7 @@ async function convertToPptx(input, onProgress) { const g = parseInt(tc.slice(2,4), 16); const b = parseInt(tc.slice(4,6), 16); const lum = (r * 299 + g * 587 + b * 114) / 1000; - if (lum > 128) { - const canvasBg = canvas.backgroundColor ? rgbaToHex(canvas.backgroundColor) : null; - slideBg = { color: canvasBg || '1A1A1A' }; - } else { - slideBg = { color: 'FAFAFA' }; - } + slideBg = lum > 128 ? { color: '1A1A1A' } : { color: 'FAFAFA' }; } } }