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