JBIG2-Komprimierungsunterstützung

Übersicht

HotPDF bietet nun eine umfassende JBIG2-Komprimierungsunterstützung (Joint Bi-level Image Experts Group 2); JBIG2 ist ein verlustbehafteter oder verlustfreier Komprimierungsstandard, der speziell für Binärbilder (Monochrom) entwickelt wurde und häufig in PDF-Dokumenten für gescannte Textseiten und Strichzeichnungen verwendet wird

Hauptmerkmale

  • Hocheffiziente Komprimierung für Bilevel-Bilder
  • Unterstützung sowohl verlustbehafteter als auch verlustfreier Komprimierungsmodi
  • Optimiert für die Komprimierung von Text und Strichzeichnungen
  • Deutliche Dateigrößenreduktion gegenüber klassischen Komprimierungsverfahren
  • Mehrseiten-Kodierung mit einem trainierten Symbolwörterbuch, das alle Bild-XObjects teilen
  • Exakte Erkennung doppelter Seiten vor der Klassifikation und Wiederverwendung kodierter XObjects beim PDF-Zusammenbau
  • Begrenzte Seiten- und Pixel-Budgets mit optionalem nativem Pascal-Fallback

Vorteile der Komprimierung

  • Überragende Komprimierungsraten:Bis zu 3-5x bessere Komprimierung als Group 4 CCITT
  • Symbol-Abgleich: Mit UseSymbolDictionary werden wiederholte schwarze verbundene Komponenten einmal als Symbole gespeichert, und LossyLevel lässt nahezu identische Komponenten ein Symbol teilen
  • Speichereffizient:Optimiert für die Verarbeitung großer gescannter Dokumente

Typische Anwendungsfälle

  • Gescannte Textdokumente
  • Technische Zeichnungen und Entwürfe
  • Formulare und Rechnungen
  • Karten und Diagramme
  • Dokumente mit gemischtem Inhalt aus Text und Grafiken

Technische Implementierung

Die JBIG2-Unterstützung ist in der Einheit HPDFJBIG2.pas implementiert, welche Folgendes bietet:

  • THPDFJBIG2Decoder: zentrale Dekodierer-Klasse für JBIG2-komprimierte Daten
  • Native Kodier-Abdeckung: MMR-Generikaregionen, MQ-Generikaregionen, arithmetische und Standard-Huffman-Symbolwörterbücher und Textregionen, Refinement-Symbole, Aggregatsymbole, verfeinerte Textinstanzen, erhaltene arithmetische Kontexte und begrenzte Referenztabellen im Long-Form-Format
  • Begrenzte Kontext-Wiederverwendung: Generic- und Refinement-Wahrscheinlichkeitsbänke bleiben mit template-bewussten Größen erhalten, sind über Fan-out-Abhängigkeiten hinweg isoliert und werden abgelehnt, wenn Quelle oder Template inkompatibel ist
  • Stream-Verarbeitung: effiziente Behandlung von JBIG2-Datenströmen
  • Globale Wörterbuch-Unterstützung: geteilte und mehrstufig verkettete Symbolwörterbücher mit 1-, 2- oder 4-Byte-Segmentbezeichnern
  • Seitenübergreifender Batch-Encoder: THPDFJBIG2Encoder.EncodePagesToByteArrays trainiert über den kompletten Batch und liefert einen Seiten-Stream pro Eingabe plus gemeinsame globale Daten
  • Batch-Kontrakt: TJBIG2BatchPage beschreibt eine gepackte Seite, TJBIG2BatchEncodeBackend benennt die gewählte Implementierung, und TJBIG2BatchEncodeCallback definiert externe Batch-Integrationen
  • Dokument-Integration: THotPDF.AddJBIG2ImageBatch und THotPDF.AddJBIG2BitmapBatch kodieren, bevor der PDF-Graph verändert wird, hängen einen gemeinsamen /JBIG2Globals-Stream an und liefern Bildindizes in Eingabereihenfolge
  • Batch-Telemetrie: TJBIG2BatchEncodeStatistics meldet den gewählten Backend, Ein- und Ausgabegrößen, die native Symbolanzahl und Budget-Zurückweisungen
  • Backend-Wiederherstellung: HPDFJBIG2EncRegisterBackends stellt beide eingebauten Encoder-Callbacks wieder her, nachdem temporäre Anwendungs-Overrides entfernt wurden
  • HPDFJBIG2SplitSymbolDictionaryGlobals: trennt einen sequenziellen eingebetteten Stream in globale Wörterbücher und Seitenbild-Segmente und bewahrt dabei Long-Form-Abhängigkeits-Header
  • Dekodierung sichtbarer Regionen: THPDFJBIG2Decoder.LoadRegionFromByteArray allokiert nur das angeforderte Fenster, löst seine transitiven Wörterbuch-Abhängigkeiten auf, setzt sich überschneidende Seitenregionen mit Clipping zusammen und überspringt unabhängige Regionen außerhalb des Fensters vor der Entropiedekodierung
  • Region-Dekodier-Telemetrie: LastRegionDecodeStats meldet dekodierte und übersprungene Regionsanzahlen plus dekodierte Quellpixel, während UsedIncrementalRegionDecode den nativen Fensterpfad vom Komplett-Dekodier-Fallback unterscheidet
  • Scanline-Zugriff: zeilenweiser Datenzugriff für speichereffiziente Verarbeitung

Verwendungsbeispiel


// 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;
        

Encoder-Optionen und Backends

  • THotPDF.JBIG2Options: Der THPDFJBIG2Options-Record des Dokuments, den AddImage(..., icJBIG2) in TJBIG2EncodeOptions umsetzt. Seine Defaults sind auf Scans ausgelegt: Lossless=True, LossyLevel=5, RemoveIsolatedBlackPixels=True und BlackDotSize=3
  • Speckle-Entfernung: Solange RemoveIsolatedBlackPixels True ist, werden schwarze verbundene Komponenten, deren Breite und Höhe beide kleiner als BlackDotSize sind, vor dem Kodieren entfernt; die Defaults entfernen damit Punkte von 2 x 2 Pixeln und kleiner. Setzen Sie es auf False, wenn die Ausgabe pixelgenau zur Bitmap passen muss
  • Encoder-Wahl: UseExternalEncoder (Default True) verwendet den registrierten Hochleistungs-Arithmetik-Encoder; wenn er aus ist, fehlt oder fehlschlägt, wird die eingebaute verlustfreie MMR-Generikaregion geschrieben. UseNativeArithmeticFallback=True versucht vor MMR den eingebauten Pascal-Arithmetik-Koder, und mit UseSymbolDictionary=True zuerst ein Symbol-Dictionary mit Textregionen
  • DefaultJBIG2EncodeOptions: Die Optionen, die ein eigenständiger THPDFJBIG2Encoder verwendet: verlustfrei, mit LossyLevel=0 und ohne Speckle-Entfernung
  • Decoder-Wahl: THotPDF.UseExternalJBIG2Decoder (Default True) dekodiert geladene /JBIG2Decode-Bilder mit dem Hochleistungs-Backend, wenn es verfügbar ist; False verwendet den eingebauten Pascal-Decoder
  • Eigene Backends: RegisterJBIG2EncoderBackend und RegisterJBIG2DecoderBackend installieren Anwendungs-Callbacks, IsJBIG2EncoderBackendAvailable und IsJBIG2DecoderBackendAvailable melden sie, und ClearJBIG2Backends entfernt sie

Klassenreferenz

THPDFJBIG2Decoder

  • LoadFromByteArray: Lädt JBIG2-Daten aus einem Byte-Array; liefert False, wenn die Daten unvollständig oder nicht unterstützt sind
  • GetScanline:Spezifische Scanzeilendaten abrufen
  • Width/Height:Bildeigenschaft für Abmessungen

Leistungsoptimierung

  • Ein fester 100-Seiten-Scan-Korpus komprimiert von 158.300 Bytes mit getrennten Generikaregionen auf 33.600 Bytes mit externem seitenübergreifenden Training, eine Reduktion um 78,8 Prozent
  • Derselbe Korpus absolviert den Regressionsbenchmark in 11 ms statt 53 ms auf Win64 und 16 ms statt 77 ms auf Win32
  • Die Seite-zu-Symbol-Suche ist indiziert, und wiederholte kodierte Seiten-Streams werden für batchweise Extraktion in konstanter Zeit zwischengespeichert
  • Speichereffiziente Scanline-Verarbeitung
  • Optimiert für die Verarbeitung großer Dokumente
  • Minimaler Speicherbedarf während der Dekomprimierung

Standards-Konformität

  • Konformität mit dem ITU-T-Standard T.88
  • Unterstützung des ISO/IEC-14492-Standards
  • Bild-XObjects ab PDF 1.4 mit /JBIG2Decode und /JBIG2Globals
  • Solange PDF/A-Ausgabe aktiv ist, schreibt HotPDF kein JBIG2: AddImage(..., icJBIG2) schreibt stattdessen icCCITT42, und die Batch-Einfügung liefert False
  • Plattformübergreifende Konsistenz

Siehe auch