From 219afd0e1ddf363debc731aaef181977b1b26f39 Mon Sep 17 00:00:00 2001 From: gzz727 Date: Mon, 21 Sep 2026 15:29:35 +0800 Subject: [PATCH 1/5] feat(scanner): document shadow removal, paper whitening enhancement, and live compare --- src/locales/de.json | 14 ++ src/locales/en.json | 14 ++ src/locales/es.json | 14 ++ src/locales/fr.json | 14 ++ src/locales/zh.json | 14 ++ src/tools/ImageToPdfTool.vue | 273 +++++++++++++++++++++++- src/utils/imageProcess.js | 182 ++++++++++++++++ src/utils/pipeline/nodes/img2pdfNode.js | 4 +- tests/documentEnhance.test.js | 165 ++++++++++++++ 9 files changed, 682 insertions(+), 12 deletions(-) create mode 100644 tests/documentEnhance.test.js diff --git a/src/locales/de.json b/src/locales/de.json index d13e77b..67d7096 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -530,6 +530,20 @@ "img2pdf_orient_auto": "Automatisch", "img2pdf_orient_portrait": "Hochformat", "img2pdf_orient_landscape": "Querformat", + "img2pdf_enhance_title": "Scanner-Verbesserung", + "img2pdf_enhance_desc": "Schatten glätten & Papier aufhellen", + "img2pdf_filter_label": "Filtermodus", + "img2pdf_filter_color": "Auto-Farbe", + "img2pdf_filter_bw": "Klares S/W", + "img2pdf_filter_grayscale": "Graustufen", + "img2pdf_shadow_label": "Schattenentfernung", + "img2pdf_shadow_low": "Leicht", + "img2pdf_shadow_medium": "Ausgewogen", + "img2pdf_shadow_high": "Stark", + "img2pdf_badge_enhanced": "Verbessert", + "img2pdf_hold_compare": "Gedrückt halten für Original", + "img2pdf_original": "Original", + "img2pdf_compare": "Vergleich", "pipeline_title": "Pipeline & Stapelverarbeitung", "pipeline_subtitle": "Verketten Sie Bereinigung, Komprimierung, Wasserzeichen, Stempeln und Zusammenführen. 100% lokal im Browserspeicher ohne Uploads.", "pro_desktop_btn": "Pro / Desktop-App", diff --git a/src/locales/en.json b/src/locales/en.json index 41809e1..11f558a 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -530,6 +530,20 @@ "img2pdf_orient_auto": "Auto", "img2pdf_orient_portrait": "Portrait", "img2pdf_orient_landscape": "Landscape", + "img2pdf_enhance_title": "Scanner Enhancement", + "img2pdf_enhance_desc": "Flatten phone shadows & whiten paper", + "img2pdf_filter_label": "Enhance Filter", + "img2pdf_filter_color": "Auto Color", + "img2pdf_filter_bw": "Crisp B&W", + "img2pdf_filter_grayscale": "Grayscale", + "img2pdf_shadow_label": "Shadow Removal", + "img2pdf_shadow_low": "Subtle", + "img2pdf_shadow_medium": "Balanced", + "img2pdf_shadow_high": "Strong", + "img2pdf_badge_enhanced": "Enhanced", + "img2pdf_hold_compare": "Hold to see original", + "img2pdf_original": "Original", + "img2pdf_compare": "Hold Compare", "pipeline_title": "Automated Pipeline & Batch", "pipeline_subtitle": "Chain sanitization, compression, watermarking, stamping, and merging. Batch process multiple documents 100% locally in browser memory with zero uploads.", "pro_desktop_btn": "Upgrade Pro / Desktop", diff --git a/src/locales/es.json b/src/locales/es.json index 6b0b57d..8dd84b4 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -530,6 +530,20 @@ "img2pdf_orient_auto": "Automático", "img2pdf_orient_portrait": "Vertical", "img2pdf_orient_landscape": "Horizontal", + "img2pdf_enhance_title": "Mejora de Escáner", + "img2pdf_enhance_desc": "Eliminar sombras y blanquear papel", + "img2pdf_filter_label": "Filtro de Mejora", + "img2pdf_filter_color": "Color Automático", + "img2pdf_filter_bw": "B/N Nítido", + "img2pdf_filter_grayscale": "Escala de Grises", + "img2pdf_shadow_label": "Eliminación de sombras", + "img2pdf_shadow_low": "Suave", + "img2pdf_shadow_medium": "Equilibrado", + "img2pdf_shadow_high": "Fuerte", + "img2pdf_badge_enhanced": "Mejorado", + "img2pdf_hold_compare": "Mantén presionado para original", + "img2pdf_original": "Original", + "img2pdf_compare": "Comparar", "pipeline_title": "Pipeline y Lotes", "pipeline_subtitle": "Encadene saneamiento, compresión, marcas de agua, sellado y combinación. Procesamiento por lotes 100% local sin subidas.", "pro_desktop_btn": "Pro / App de escritorio", diff --git a/src/locales/fr.json b/src/locales/fr.json index c2fe587..a6806f5 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -530,6 +530,20 @@ "img2pdf_orient_auto": "Automatique", "img2pdf_orient_portrait": "Portrait", "img2pdf_orient_landscape": "Paysage", + "img2pdf_enhance_title": "Amélioration Scanner", + "img2pdf_enhance_desc": "Supprimer les ombres et blanchir le papier", + "img2pdf_filter_label": "Filtre d'amélioration", + "img2pdf_filter_color": "Couleur Auto", + "img2pdf_filter_bw": "N&B Net", + "img2pdf_filter_grayscale": "Niveaux de gris", + "img2pdf_shadow_label": "Suppression des ombres", + "img2pdf_shadow_low": "Léger", + "img2pdf_shadow_medium": "Équilibré", + "img2pdf_shadow_high": "Fort", + "img2pdf_badge_enhanced": "Amélioré", + "img2pdf_hold_compare": "Maintenir pour original", + "img2pdf_original": "Original", + "img2pdf_compare": "Comparer", "pipeline_title": "Pipeline & Traitement par lots", "pipeline_subtitle": "Enchaînez anonymisation, compression, filigrane, tampon et fusion. Traitement par lots 100% local en mémoire sans téléversement.", "pro_desktop_btn": "Pro / Application bureau", diff --git a/src/locales/zh.json b/src/locales/zh.json index 3c87529..56c906b 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -530,6 +530,20 @@ "img2pdf_orient_auto": "自适应", "img2pdf_orient_portrait": "纵向", "img2pdf_orient_landscape": "横向", + "img2pdf_enhance_title": "文档扫描增强 (去阴影 / 增白)", + "img2pdf_enhance_desc": "抹平手机暗影,纸面纯白提亮", + "img2pdf_filter_label": "增强滤镜", + "img2pdf_filter_color": "智能彩色 (保留印章)", + "img2pdf_filter_bw": "高清黑白", + "img2pdf_filter_grayscale": "清晰灰度", + "img2pdf_shadow_label": "去阴影强度", + "img2pdf_shadow_low": "弱", + "img2pdf_shadow_medium": "均衡", + "img2pdf_shadow_high": "强力", + "img2pdf_badge_enhanced": "已增强", + "img2pdf_hold_compare": "按住查看原图", + "img2pdf_original": "原图", + "img2pdf_compare": "按住对比", "pipeline_title": "自动化流水线 & 批处理", "pipeline_subtitle": "一键串联脱敏、压缩、加水印、盖章与合并,对多份文档进行流水线批量处理。100% 浏览器本地运算,零上传,极速安全。", "pro_desktop_btn": "升级 Pro / 独立桌面版", diff --git a/src/tools/ImageToPdfTool.vue b/src/tools/ImageToPdfTool.vue index e5c021b..cbdd6f3 100644 --- a/src/tools/ImageToPdfTool.vue +++ b/src/tools/ImageToPdfTool.vue @@ -160,9 +160,15 @@ @drop="onDropReorder(idx)" class="bg-white rounded-xl sm:rounded-2xl p-1.5 sm:p-2.5 border border-slate-200/80 shadow-2xs hover:border-violet-400 hover:shadow-md transition flex flex-col justify-between group relative select-none" > - -
- P{{ idx + 1 }} + +
+ + P{{ idx + 1 }} + + + + +
@@ -174,13 +180,29 @@ - -
+ +
+ + +
@@ -229,8 +251,88 @@
-