|
JBIG2-compressieondersteuning
Overzicht
HotPDF bevat JBIG2-compressie en -decodering voor bilevel-afbeeldingen zoals die voorkomen in gescande tekst, formulieren en lijntekeningen
Belangrijkste kenmerken
- Zeer efficiënte compressie voor bilevel-afbeeldingen
- Ondersteuning voor zowel verlieslatende als verliesvrije compressiemodi
- Geoptimaliseerd voor compressie van tekst en lijntekeningen
- Aanzienlijke bestandsverkleining vergeleken met traditionele compressiemethoden
- Encodering over meerdere pagina's met één getraind symboolwoordenboek dat door elke afbeeldings-XObject wordt gedeeld
- Exacte detectie van duplicaatpagina's vóór classificatie en hergebruik van gecodeerde XObjects tijdens de PDF-assemblage
- Begrensde pagina- en pixelbudgetten met optionele native Pascal-fallback
Compression Benefits
- Cross-page-hergebruik: Herhaalde symbolen worden één keer geclassificeerd en in gedeelde globale data opgeslagen
- Symboolmatching: Met
UseSymbolDictionary worden herhaalde zwarte samenhangende componenten één keer als symbool opgeslagen, en met LossyLevel delen vrijwel identieke componenten één symbool
- Geheugenefficiënt: Geoptimaliseerd voor het verwerken van grote gescande documenten
Typische gebruiksscenario's
- Gescande tekstdocumenten
- Technische tekeningen en blauwdrukken
- Formulieren en facturen
- Kaarten en diagrammen
- Documenten met gemengde inhoud van tekst en graphics
Technische implementatie
De JBIG2-implementatie biedt native Pascal-paden en een optionele statische externe backend via deze API's
- THPDFJBIG2Decoder: Kerndecoderklasse voor JBIG2-gecomprimeerde data
- Native-codeerdekking: MMR generic regions, MQ generic regions, rekenkundige en standaard-Huffman-symboolwoordenboeken en tekstregio's, refinement-symbolen, geaggregeerde symbolen, verfijnde tekstinstanties, bewaarde rekenkundige contexts en begrensde long-form-verwijzingstabellen
- Begrensd contexthergebruik: Generic- en refinement-kansenbanken worden bewaard met templatebewuste groottes, geïsoleerd over fan-out-afhankelijkheden en geweigerd wanneer hun bron of template incompatibel is
- Streamverwerking: Efficiënte afhandeling van JBIG2-datastreams
- Ondersteuning voor globale woordenboeken: Gedeelde en meerlevelig geketende symboolwoordenboeken met segmentidentificatoren van één, twee of vier bytes
- Cross-page-batch-encoder:
THPDFJBIG2Encoder.EncodePagesToByteArrays traint over de volledige batch en geeft per invoer één paginastream terug plus gedeelde globale data
- Batchcontract:
TJBIG2BatchPage beschrijft één verpakte pagina, TJBIG2BatchEncodeBackend identificeert de gekozen implementatie en TJBIG2BatchEncodeCallback definieert externe batch-integraties
- Documentintegratie:
THotPDF.AddJBIG2ImageBatch en THotPDF.AddJBIG2BitmapBatch coderen vóórdat de PDF-graaf wordt gewijzigd, koppelen een gedeelde /JBIG2Globals-stream en geven afbeeldingsindexen in invoervolgorde terug
- Batchtelemetrie:
TJBIG2BatchEncodeStatistics rapporteert de gekozen backend, invoer- en uitvoergroottes, het aantal native symbolen en budgetweigeringen
- Backendherstel:
HPDFJBIG2EncRegisterBackends zet beide ingebouwde encoder-callbacks terug zodra tijdelijke overrides van de toepassing zijn gewist
- HPDFJBIG2SplitSymbolDictionaryGlobals: Splitst een sequentiële ingesloten stream in globale woordenboeken en pagina-afbeeldingssegmenten waarbij long-form-afhankelijkheidheaders bewaard blijven
- Zichtbare-regio-decodering:
THPDFJBIG2Decoder.LoadRegionFromByteArray wijst alleen het gevraagde venster toe, lost de transitieve woordenboekafhankelijkheden op, stelt kruisende paginaregio's samen met clipping en slaat onafhankelijke regio's buiten het venster over vóór de entropy-decodering
- Regiodecode-telemetrie:
LastRegionDecodeStats rapporteert het aantal gedecodeerde en overgeslagen regio's plus gedecodeerde bronpixels, terwijl UsedIncrementalRegionDecode het native vensterpad onderscheidt van de complete-decode-fallback
- Scanline-toegang: Rij-voor-rij-toegang tot de data voor geheugenefficiënte verwerking
Gebruiksvoorbeeld
// Delphi example - Processing JBIG2 compressed data procedure ProcessJBIG2Data; var PDF: THotPDF; Decoder: THPDFJBIG2Decoder; ImageData: TBytesArray; ScanlineData: TBytesArray; Row: Integer; begin PDF := THotPDF.Create(nil); Decoder := THPDFJBIG2Decoder.Create; try PDF.BeginDoc; PDF.AddPage; // Load JBIG2 compressed image data if Decoder.LoadFromByteArray(ImageData) then begin // Process scanline by scanline for memory efficiency for Row := 0 to Decoder.Height - 1 do begin if Decoder.GetScanline(Row, ScanlineData) then begin // Process scanline data as needed // Add to PDF page end; end; end; PDF.EndDoc; finally Decoder.Free; PDF.Free; end; end;
Encoderopties en backends
- THotPDF.JBIG2Options: De
THPDFJBIG2Options van het document, die AddImage(..., icJBIG2) omzet naar TJBIG2EncodeOptions. De standaardwaarden zijn geschikt voor scans: Lossless=True, LossyLevel=5, RemoveIsolatedBlackPixels=True en BlackDotSize=3
- Speckle-verwijdering: Zolang
RemoveIsolatedBlackPixels True is, worden zwarte samenhangende componenten waarvan breedte en hoogte allebei kleiner zijn dan BlackDotSize gewist vóór de codering, dus de standaardwaarden verwijderen stippen van 2 x 2 pixels en kleiner. Zet het op False wanneer de uitvoer pixel voor pixel moet matchen met de bitmap
- Encoderkeuze:
UseExternalEncoder (standaard True) gebruikt de geregistreerde hoogperformante rekenkundige encoder; wanneer die uit staat, ontbreekt of faalt, wordt de ingebouwde verliesloze MMR generic region geschreven. UseNativeArithmeticFallback=True probeert vóór MMR de ingebouwde Pascal-rekenkundige coder, en met UseSymbolDictionary=True probeert die eerst een symboolwoordenboek met tekstregio's
- DefaultJBIG2EncodeOptions: De opties die een zelfstandige
THPDFJBIG2Encoder gebruikt: verliesloos, met LossyLevel=0 en zonder speckle-verwijdering
- Decoderkeuze:
THotPDF.UseExternalJBIG2Decoder (standaard True) decodeert geladen /JBIG2Decode-afbeeldingen met het hoogperformante backend wanneer dat beschikbaar is; False gebruikt de ingebouwde Pascal-decoder
- Eigen backends:
RegisterJBIG2EncoderBackend en RegisterJBIG2DecoderBackend installeren callbacks van de toepassing, IsJBIG2EncoderBackendAvailable en IsJBIG2DecoderBackendAvailable melden ze, en ClearJBIG2Backends verwijdert ze
Class Reference
THPDFJBIG2Decoder
- LoadFromByteArray: JBIG2-data uit een bytearray laden; geeft False terug wanneer de data onvolledig of niet ondersteund is
- GetScanline: Specifieke scanlinedata ophalen
- Width/Height: Properties voor de afmetingen van de afbeelding
Performance Optimization
- Een vast scancorpus van 100 pagina's comprimeert van 158.300 bytes met aparte generic regions naar 33.600 bytes met externe cross-page-training, een reductie van 78,8 procent
- Hetzelfde corpus klaart de regressiebenchmark in 11 ms in plaats van 53 ms op Win64 en in 16 ms in plaats van 77 ms op Win32
- De pagina-naar-symbool-opzoeking is geïndexeerd en herhaalde gecodeerde paginastreams worden gecached voor batch-extractie in constante tijd
- Geheugenefficiënte scanlineverwerking
- Geoptimaliseerd voor het verwerken van grote documenten
- Minimale geheugenvoetafdruk tijdens decompressie
Standaardconformiteit
- Conform aan de ITU-T T.88-standaard
- Ondersteuning voor de ISO/IEC 14492-standaard
- Image-XObjects uit PDF 1.4 of later met
/JBIG2Decode en /JBIG2Globals
- HotPDF schrijft geen JBIG2 terwijl PDF/A-uitvoer actief is:
AddImage(..., icJBIG2) schrijft in plaats daarvan icCCITT42 en batchinvoeging geeft False terug
- Cross-platform consistentie
Zie ook
|