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