|
Soporte de compresión JBIG2
Descripción general
HotPDF ahora incluye compatibilidad completa con compresión JBIG2 (Joint Bi-level Image Experts Group 2)
JBIG2 es un estándar de compresión con pérdida o sin pérdida diseñado específicamente para imágenes binivel (monocromas),
comúnmente usado en documentos PDF para páginas de texto escaneadas y arte lineal
Funciones clave
- High-efficiency compression for bilevel images
- Compresión de alta eficiencia para imágenes binivel
- Compatibilidad con modos de compresión con pérdida y sin pérdida
- Optimizado para compresión de texto y arte lineal
- Reducción significativa del tamaño de archivo frente a métodos de compresión tradicionales
- Compatibilidad completa con conformidad PDF/A
- Compatibilidad con documentos multipágina mediante diccionarios compartidos
Ventajas de compresión
- Relaciones de compresión superiores: Hasta 3-5 veces mejor compresión que Group 4 CCITT
- Symbol matching: Con
UseSymbolDictionary, los componentes conexos negros repetidos se guardan una vez como símbolos, y LossyLevel permite que los componentes casi idénticos compartan un símbolo
- Eficiente en memoria: Optimizado para procesar documentos escaneados grandes
Casos de uso típicos
- Documentos de texto escaneados
- Dibujos técnicos y planos
- Formularios y facturas
- Mapas y diagramas
- Documentos de contenido mixto con texto y gráficos
Implementación técnica
El soporte JBIG2 se implementa mediante la unidad HPDFJBIG2.pas, que ofrece:
- THPDFJBIG2Decoder: Clase decodificadora principal para datos comprimidos JBIG2
- Procesamiento de flujos: Manejo eficiente de flujos de datos JBIG2
- Compatibilidad con diccionario global: Diccionarios de símbolos compartidos para documentos multipágina
- Acceso por scanline: Acceso a datos fila por fila para procesamiento eficiente en memoria
- Soporte de diccionarios globales: Diccionarios de símbolos compartidos y encadenados de varios niveles, con identificadores de segmento de uno, dos o cuatro bytes
- Codificador por lotes entre páginas:
THPDFJBIG2Encoder.EncodePagesToByteArrays entrena con el lote completo y devuelve un stream por cada página de entrada, más los datos globales compartidos
- Contrato de lotes:
TJBIG2BatchPage describe una página empaquetada, TJBIG2BatchEncodeBackend identifica la implementación seleccionada y TJBIG2BatchEncodeCallback define las integraciones externas de lotes
- Integración con el documento:
THotPDF.AddJBIG2ImageBatch y THotPDF.AddJBIG2BitmapBatch codifican antes de modificar el grafo del PDF, adjuntan un stream /JBIG2Globals compartido y devuelven los índices de imagen en el orden de entrada
- Telemetría de lotes:
TJBIG2BatchEncodeStatistics informa el backend seleccionado, los tamaños de entrada y salida, la cantidad de símbolos nativos y el rechazo por presupuesto
- Recuperación de backends:
HPDFJBIG2EncRegisterBackends restaura ambos callbacks de codificador integrados después de limpiar las anulaciones temporales de la aplicación
- HPDFJBIG2SplitSymbolDictionaryGlobals: Separa un stream incrustado secuencial en diccionarios globales y segmentos de imagen de página, conservando los encabezados de dependencia en formato largo
- Decodificación de la región visible:
THPDFJBIG2Decoder.LoadRegionFromByteArray asigna solo la ventana solicitada, resuelve sus dependencias transitivas de diccionarios, compone las regiones de página que se intersecan aplicando recorte y omite las regiones independientes fuera de la ventana antes de la decodificación de entropía
- Telemetría de decodificación de regiones:
LastRegionDecodeStats informa la cantidad de regiones decodificadas y omitidas, además de los píxeles de origen decodificados, mientras que UsedIncrementalRegionDecode distingue la ruta nativa por ventana del fallback de decodificación completa
- Acceso por scanline: Acceso a los datos fila por fila para un procesamiento eficiente en memoria
Usage Ejemplo
// 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;
Opciones del encoder y backends
- THotPDF.JBIG2Options: El
THPDFJBIG2Options del documento, que AddImage(..., icJBIG2) convierte en TJBIG2EncodeOptions. Sus valores predeterminados sirven para escaneos: Lossless=True, LossyLevel=5, RemoveIsolatedBlackPixels=True y BlackDotSize=3
- Speckle removal: Mientras
RemoveIsolatedBlackPixels sea True, los componentes conexos negros cuyo ancho y alto sean ambos menores que BlackDotSize se limpian antes de codificar, así que los valores predeterminados eliminan puntos de 2 x 2 píxeles y menores. Póngalo en False cuando la salida deba coincidir píxel a píxel con el bitmap
- Encoder choice:
UseExternalEncoder (True por defecto) usa el codificador aritmético de alto rendimiento registrado; cuando está apagado, falta o falla, se escribe la región genérica MMR sin pérdida integrada. UseNativeArithmeticFallback=True prueba el codificador aritmético Pascal integrado antes que MMR, y con UseSymbolDictionary=True prueba primero un diccionario de símbolos con regiones de texto
- DefaultJBIG2EncodeOptions: Las opciones que usa un
THPDFJBIG2Encoder independiente: sin pérdida, con LossyLevel=0 y sin limpieza de puntos
- Decoder choice:
THotPDF.UseExternalJBIG2Decoder (True por defecto) decodifica imágenes /JBIG2Decode cargadas con el backend de alto rendimiento cuando está disponible; False usa el decodificador Pascal integrado
- Custom backends:
RegisterJBIG2EncoderBackend y RegisterJBIG2DecoderBackend instalan callbacks de la aplicación, IsJBIG2EncoderBackendAvailable y IsJBIG2DecoderBackendAvailable los reportan, y ClearJBIG2Backends los elimina
Class Reference
THPDFJBIG2Decoder
- LoadFromByteArray: Carga datos JBIG2 desde un byte array; devuelve False cuando los datos están incompletos o no son compatibles
- GetScanline: Retrieve specific scanline data
- Width/Height: Image dimensions properties
Performance Optimization
- Un corpus fijo de escaneo de 100 páginas se comprime de 158,300 bytes con regiones genéricas separadas a 33,600 bytes con entrenamiento cruzado externo entre páginas, una reducción del 78,8 por ciento
- El mismo corpus se completa en 11 ms en lugar de 53 ms en Win64 y en 16 ms en lugar de 77 ms en Win32 en el benchmark de regresión
- La búsqueda página-a-símbolo está indexada y los streams de página codificados repetidos se guardan en cache para extracción por lotes en tiempo constante
- Procesamiento de scanlines eficiente en memoria
- Optimizado para el manejo de documentos grandes
- Huella de memoria mínima durante la descompresión
Véase también
- Conformidad con el estándar ITU-T T.88
- Soporte del estándar ISO/IEC 14492
- Image XObjects de PDF 1.4 o posterior con
/JBIG2Decode y /JBIG2Globals
- HotPDF no escribe JBIG2 mientras la salida PDF/A está activa:
AddImage(..., icJBIG2) escribe icCCITT42 en su lugar y la inserción por lotes devuelve False
- Consistencia multiplataforma
Ver también
|