JpgToPdfModal: PDF-Größe massiv reduziert
Stage-Bug: 2 Handy-JPGs à 2 MB → PDF >10 MB → Multer 413. Ursache:
Canvas-Re-Encode mit JPEG-Quality 1.0 blies jedes Bild auf 8-15 MB
auf (Quality 100 % ≠ "identisch zum Original", sondern "möglichst
viele Bits pro Pixel" – ein schon JPEG-komprimiertes Smartphone-
Foto wird so künstlich 4-8× größer).
Fix 1: Wenn Rotation/Flip unverändert (Standardfall), Original-
DataURL 1:1 in die PDF einbetten – kein Canvas-Roundtrip, keine
Quality-Aufblähung. 2-MB-JPEG bleibt 2 MB. Format-Detection per
data:image/png-Prefix (PNG vs JPEG).
Fix 2: Bei Transformation toDataURL('image/jpeg', 0.95) statt 1.0.
Visuell identisch für Foto-Inhalte, 50-70 % kleiner.
Kombiniert: 2 untransformierte Handy-Fotos ≈ 4 MB PDF (vorher
16-30 MB), 2 gedrehte ≈ 5-8 MB.
This commit is contained in:
@@ -97,6 +97,22 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🆕 JpgToPdfModal: PDF-Größe drastisch reduziert (Original-Bytes + Quality 0.95)**
|
||||
- Stage-Bug: 2 Handy-JPGs à 2 MB → PDF >10 MB → Multer 413. Ursache:
|
||||
Canvas-Re-Encode mit JPEG-Quality 1.0 blies jedes Bild auf 8-15 MB
|
||||
auf (Quality 100 % heißt nicht „identisch zum Original", sondern
|
||||
„möglichst viele Bits pro Pixel" – ein schon JPEG-komprimiertes
|
||||
Smartphone-Foto wird so künstlich 4-8× größer).
|
||||
- **Fix 1:** Wenn Rotation/Flip unverändert (Standardfall), wird die
|
||||
Original-DataURL 1:1 in die PDF eingebettet – kein Canvas-Roundtrip,
|
||||
keine Quality-Aufblähung. 2-MB-JPEG bleibt 2 MB. Funktioniert für
|
||||
JPEG und PNG (Format-Detection per `data:image/png`-Prefix).
|
||||
- **Fix 2:** Bei Transformation: `toDataURL('image/jpeg', 0.95)` statt
|
||||
`1.0`. Visuell identisch für Foto-Inhalte (Adobe-Lightroom-Default),
|
||||
aber 50-70 % kleiner.
|
||||
- Kombiniert: 2 untransformierte Handy-Fotos ≈ 4 MB PDF (vorher
|
||||
16-30 MB), 2 gedrehte ≈ 5-8 MB.
|
||||
|
||||
- [x] **🔒 Pentest 70.2 (LOW): falscher 500 statt 415 bei verbotenem MIME-Type**
|
||||
- Globaler Error-Handler in `index.ts:461` matcht
|
||||
`/sind erlaubt|nicht erlaubt/i` und mappt auf 415. Meine 70.1-
|
||||
|
||||
Reference in New Issue
Block a user