Telefoonfoto's naar pdf: waarom het bestand enorm wordt en een pagina op zijn kant staat
Afbeeldingen naar PDF zet elke foto op een eigen pagina op volle pixelgrootte: drie jpeg's van 3,2 MB van telefoonformaat werden een pdf van 41,5 MB, en een staande foto kwam op een liggende pagina terecht. Verklein de foto's voor het converteren en draai de scheve pagina daarna.
Afbeeldingen naar PDF maakt van JPEG-, PNG-, GIF- of BMP-bestanden één pdf, met één afbeelding per pagina in de volgorde van uploaden. Het verkleint niets en negeert de rotatievlag die telefoons in staande foto's schrijven. In één testrun kwamen drie jpeg's van 3,2 MB terug als een pdf van 41,5 MB, en een foto die als staand was gemarkeerd belandde op een liggende pagina. Verklein de foto's voordat u ze uploadt en herstel de scheve pagina achteraf met PDF draaien.
Het uitgewerkte voorbeeld
De invoer bestond uit drie jpeg's van 4032 × 3024 pixels, elk ongeveer 3,2 MB (samen 9,7 MB), de pixelgrootte van een gangbaar camerabeeld van een telefoon. Het waren synthetische beelden met fijne ruis, die slechter comprimeren dan de meeste echte foto's; beschouw elke grootte hieronder als één run op 2026-10-04 tegen een lokale server gebouwd uit de huidige broncode, niet als een belofte. Het verzoek:
curl -s -o IMG_0001.pdf \
-F fileInput=@IMG_0001.jpg -F fileInput=@IMG_0002.jpg -F fileInput=@IMG_0003.jpg \
https://pdf123.xyz/api/v1/convert/img/pdf
| Stap | Resultaat |
|---|---|
| 3 jpeg's, 4032 × 3024 px | samen 9,7 MB |
| Afbeeldingen naar PDF | 3 pagina's, 41,5 MB, elke pagina 4032 × 3024 pt |
| PDF comprimeren op die pdf | 39,9 MB, ongeveer 4% kleiner |
| Dezelfde 3 foto's eerst verkleind tot 1600 px op de lange zijde | samen 1,7 MB |
| Afbeeldingen naar PDF op de verkleinde foto's | 3 pagina's, 6,2 MB, elke pagina 1600 × 1200 pt |
| PDF comprimeren op die pdf | 6,2 MB, niet kleiner |
De uitvoer is genoemd naar het eerste bestand, dus de download hierboven is IMG_0001.pdf.
Waarom 10 MB aan foto's 41 MB wordt
Een jpeg bewaart een foto als verliesgevend gecomprimeerde blokken. Afbeeldingen naar PDF kopieert die bytes niet in de pdf. Het decodeert elke afbeelding, zet die om naar 8-bit RGB en bewaart de ruwe pixels met verliesvrije Flate-compressie. Eén beeld van 4032 × 3024 is 36,6 miljoen bytes RGB (4032 × 3024 × 3). Flate bracht dat hier terug tot ongeveer 13,8 MB per pagina, nog altijd ruim viermaal de jpeg waaruit het kwam. Negen exemplaren van dezelfde drie foto's gaven een pdf van 124,6 MB.
Dat verklaart ook de rijen over comprimeren. PDF comprimeren comprimeert streams opnieuw en pakt objecten in; het verlaagt de resolutie van afbeeldingen niet en codeert ze niet opnieuw. De pixels zijn al met Flate gecomprimeerd, dus er valt weinig weg te halen (waarom). De weg naar een kleiner bestand loopt via minder pixels voordat de pdf wordt gebouwd.
Er is een tweede kostenpost. Elke pagina krijgt de afmeting van haar afbeelding, één pixel op één punt, dus een foto van 4032 pixels geeft een pagina van 56 inch breed. Viewers passen die aan het venster aan en printers schalen hem naar het papier, maar de paginaformaten zijn geen A4 of Letter. Het formulier heeft geen optie voor papierformaat, passen, kleurtype of automatisch roteren, en de server leest de API-velden fitOption, colorType en autoRotate niet.
Eerst verkleinen, dan converteren
Verklein de foto's voordat u ze uploadt. Op een Mac doet sips -Z 1600 IMG_0001.jpg --out small1.jpg dat. Met ImageMagick op elk systeem:
magick IMG_0001.jpg -resize 1600x1600 -quality 85 small1.jpg
Beide maken van een foto van 4032 × 3024 een foto van 1600 × 1200. In deze run daalden de drie jpeg's van 9,7 MB naar 1,7 MB en de pdf van drie pagina's van 41,5 MB naar 6,2 MB. Op een Letter-vel zijn 1600 pixels over 11 inch ongeveer 145 dpi: leesbaar voor een gefotografeerd formulier, grof voor kleine letters. Kies de grootte op basis van de kleinste tekst die u moet kunnen lezen, niet alleen op basis van het doel voor de bestandsgrootte.
De grootte telt dubbel, omdat ook de tools die erna komen een plafond hebben. De body van één verzoek is beperkt tot 100 MiB. De pdf van 124,6 MB hierboven werd bij het versturen naar PDF comprimeren geweigerd met een 413 (payload_too_large). Zie Wanneer een grote PDF-upload wordt geweigerd voor de manier om dat te omzeilen.
De pagina die op zijn kant staat
Veel telefoons slaan een staande foto op als liggende pixels en voegen een EXIF-oriëntatietag toe die de viewer opdraagt hem te draaien. Foto-apps volgen die tag meestal. Afbeeldingen naar PDF leest hem niet: een jpeg van 1600 × 1200 met oriëntatie 6 (90° met de klok mee draaien) leverde een liggende pagina van 1600 × 1200 op.
De oplossing is PDF draaien: voer het paginanummer in, hier 1, en een hoek van 90. Het resultaat had /Rotate 90 op die pagina, dus een viewer toont hem rechtop. Gebruik 270 voor foto's met de andere markering (oriëntatie 8) en 180 voor ondersteboven foto's (oriëntatie 3); alleen oriëntatie 6 is hier getest. Draaien zet een absolute hoek op de pagina in plaats van op te tellen bij de huidige, en codeert de afbeelding niet opnieuw. Wilt u niet pagina voor pagina corrigeren, draai dan de foto in uw foto-app en sla een kopie op voordat u converteert.
Wat deze tool weigert
- HEIC en andere formaten. De pagina accepteert
.png,.jpg,.jpeg,.gifen.bmp. Een echt HEIC-bestand gaf een 400,unsupported_file_type; exporteer het eerst als jpeg. - Een bestand dat geen afbeelding is. Een pdf uploaden naar dit eindpunt gaf dezelfde 400 met de melding "The file is not a supported image."
- SVG. Een SVG-bestand kreeg dezelfde 400.
- Doorzoekbare tekst. Tekst op een gefotografeerde pagina blijft pixels. OCR naar Markdown geeft Markdown-tekst terug; het voegt geen tekstlaag toe aan deze pdf (hoe het werkt).
- Transparantie. Afbeeldingen worden omgezet naar RGB en het alfakanaal vervalt.
Controleer voordat u verstuurt
Open de pdf en tel de pagina's tegen de foto's, in volgorde. De paginavolgorde is de uploadvolgorde; in een test gaf het uploaden van een staande PNG vóór een liggende de staande pagina als eerste. Kijk daarna naar de bestandsgrootte voordat u het bestand bijvoegt.