JBIG2 sıkıştırma desteği

Genel bakış

HotPDF; taranmış metin, formlar ve çizgisel sanatta kullanılan iki düzeyli görüntüler için JBIG2 sıkıştırma ve çözme içerir

Öne çıkan özellikler

  • İki düzeyli görüntüler için yüksek verimli sıkıştırma
  • Hem kayıplı hem kayıpsız sıkıştırma kipleri desteği
  • Metin ve çizgisel sanat sıkıştırması için iyileştirilmiştir
  • Geleneksel sıkıştırma yöntemlerine göre belirgin dosya boyutu küçülmesi
  • Her görüntü XObject'inin paylaştığı tek bir eğitilmiş sembol sözlüğüyle çok sayfalı kodlama
  • Sınıflandırmadan önce kesin yinelenen sayfa algılama ve PDF birleştirmesi sırasında kodlanmış XObject yeniden kullanımı
  • Sınırlı sayfa ve piksel bütçeleri ile isteğe bağlı yerel Pascal geri dönüşü

Sıkıştırma yararları

  • Sayfalar arası yeniden kullanım: Yinelenen semboller bir kez sınıflandırılır ve paylaşılan global veride saklanır
  • Sembol eşleme: UseSymbolDictionary ile yinelenen siyah bağlı bileşenler sembol olarak bir kez saklanır; LossyLevel ise neredeyse özdeş bileşenlerin tek bir sembolü paylaşmasına izin verir
  • Bellek verimli: Büyük taranmış belgeleri işlemek için iyileştirilmiştir

Tipik kullanım örnekleri

  • Taranmış metin belgeleri
  • Teknik çizimler ve planlar
  • Formlar ve faturalar
  • Haritalar ve şemalar
  • Metin ve grafik içeren karma içerikli belgeler

Teknik uygulama

JBIG2 uygulaması, bu API'ler üzerinden yerel Pascal yolları ve isteğe bağlı statik bir harici arka uç sağlar

  • THPDFJBIG2Decoder: JBIG2 sıkıştırılmış veri için çekirdek çözücü sınıfı
  • Yerel kodlama kapsamı: MMR genel bölgeleri, MQ genel bölgeleri, aritmetik ve standart-Huffman sembol sözlükleri ile metin bölgeleri, iyileştirme sembolleri, toplu semboller, iyileştirilmiş metin örnekleri, saklanan aritmetik bağlamlar ve sınırlı uzun biçimli referans tabloları
  • Sınırlı bağlam yeniden kullanımı: Genel ve iyileştirme olasılık bankaları şablon duyarlı boyutlarla tutulur, fan-out bağımlılıkları arasında izole edilir ve kaynakları ya da şablonları uyumsuzsa reddedilir
  • Stream işlemesi: JBIG2 veri akışlarının verimli işlenmesi
  • Global sözlük desteği: Bir, iki veya dört baytlık segment tanımlayıcılarıyla paylaşılan ve çok düzeyli zincirli sembol sözlükleri
  • Sayfalar arası toplu kodlayıcı: THPDFJBIG2Encoder.EncodePagesToByteArrays tüm parti üzerinden eğitim yapar; her girdi için bir sayfa stream'i artı paylaşılan global veri döndürür
  • Toplu sözleşme: TJBIG2BatchPage bir paketlenmiş sayfayı tanımlar, TJBIG2BatchEncodeBackend seçilen uygulamayı belirtir, TJBIG2BatchEncodeCallback harici toplu entegrasyonları tanımlar
  • Belge entegrasyonu: THotPDF.AddJBIG2ImageBatch ve THotPDF.AddJBIG2BitmapBatch, PDF grafiğini değiştirmeden önce kodlar; paylaşılan bir /JBIG2Globals stream'i ekler ve görüntü indekslerini girdi sırasıyla döndürür
  • Toplu telemetri: TJBIG2BatchEncodeStatistics; seçilen arka ucu, girdi ve çıktı boyutlarını, yerel sembol sayısını ve bütçe reddini bildirir
  • Arka uç kurtarması: HPDFJBIG2EncRegisterBackends, geçici uygulama geçersiz kılmaları temizlendikten sonra her iki yerleşik kodlayıcı geri çağrısını geri yükler
  • HPDFJBIG2SplitSymbolDictionaryGlobals: Ardışık gömülü bir stream'i, uzun biçimli bağımlılık başlıklarını koruyarak global sözlüklere ve sayfa görüntü bölümlerine ayırır
  • Görünür bölge çözme: THPDFJBIG2Decoder.LoadRegionFromByteArray yalnızca istenen pencereyi ayırır, geçişli sözlük bağımlılıklarını çözer, kesişen sayfa bölgelerini kırparak birleştirir ve entropi çözmesinden önce pencere dışındaki bağımsız bölgeleri atlar
  • Bölge çözme telemetrisi: LastRegionDecodeStats; çözülen ve atlanan bölge sayılarını artı çözülen kaynak pikselleri bildirir, UsedIncrementalRegionDecode ise yerel pencere yolunu eksiksiz çözme geri dönüşünden ayırır
  • Satır erişimi: Bellek verimli işleme için satır satır veri erişimi

Kullanım örneği


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

Kodlayıcı seçenekleri ve arka uçlar

  • THotPDF.JBIG2Options: Belgenin THPDFJBIG2Options'u; AddImage(..., icJBIG2) bunu TJBIG2EncodeOptions'a çevirir. Varsayılanları taramalara uygundur: Lossless=True, LossyLevel=5, RemoveIsolatedBlackPixels=True ve BlackDotSize=3
  • Benek temizleme: RemoveIsolatedBlackPixels True iken, genişliği ve yüksekliği ikisi de BlackDotSize'tan küçük olan siyah bağlı bileşenler kodlamadan önce temizlenir; varsayılanlar böylece 2 x 2 piksel ve daha küçük benekleri kaldırır. Çıktının bitmap'le piksel piksel eşleşmesi gerekiyorsa False yapın
  • Kodlayıcı seçimi: UseExternalEncoder (varsayılan True) kayıtlı yüksek performanslı aritmetik kodlayıcıyı kullanır; kapalı, yoksa veya başarısız olduğunda gömülü kayıpsız MMR genel bölgesi yazılır. UseNativeArithmeticFallback=True, MMR'den önce gömülü Pascal aritmetik kodlayıcıyı dener; UseSymbolDictionary=True ile önce metin bölgeli bir sembol sözlüğü denenir
  • DefaultJBIG2EncodeOptions: Bağımsız bir THPDFJBIG2Encoder'ın kullandığı seçenekler: kayıpsız, LossyLevel=0 ve benek temizleme yok
  • Çözücü seçimi: THotPDF.UseExternalJBIG2Decoder (varsayılan True), kullanılabilir olduğunda yüklenen /JBIG2Decode görüntülerini yüksek performanslı arka uçla çözer; False, gömülü Pascal çözücüyü kullanır
  • Özel arka uçlar: RegisterJBIG2EncoderBackend ve RegisterJBIG2DecoderBackend uygulama geri çağrıları kurar, IsJBIG2EncoderBackendAvailable ve IsJBIG2DecoderBackendAvailable bunları bildirir, ClearJBIG2Backends ise kaldırır

Sınıf başvurusu

THPDFJBIG2Decoder

  • LoadFromByteArray: JBIG2 verisini bayt dizisinden yükler; veri eksikse veya desteklenmiyorsa False döndürür
  • GetScanline: Belirli satır verisini getirir
  • Width/Height: Görüntü boyutları property'leri

Performans iyileştirmesi

  • Sabit bir 100 sayfalık tarama külliyatı, ayrı genel bölgelerle 158.300 bayttan harici sayfalar arası eğitimle 33.600 bayta sıkışır; %78,8 küçülme
  • Aynı külliyat, regresyon ölçütünde Win64'te 53 ms yerine 11 ms, Win32'de 77 ms yerine 16 ms tamamlanır
  • Sayfa-to-sembol araması indekslidir ve tekrarlanan kodlanmış sayfa stream'leri, sabit zamanlı toplu çıkarma için önbelleklenir
  • Bellek verimli satır işlemesi
  • Büyük belge işlemesi için iyileştirilmiştir
  • Sıkıştırmayı açma sırasında en düşük bellek ayak izi

Standart uyumluluğu

  • ITU-T T.88 standardı uyumluluğu
  • ISO/IEC 14492 standardı desteği
  • /JBIG2Decode ve /JBIG2Globals ile PDF 1.4 ve sonrası görüntü XObject'leri
  • PDF/A çıktısı etkinken HotPDF JBIG2 yazmaz: AddImage(..., icJBIG2) bunun yerine icCCITT42 yazar ve toplu ekleme False döndürür
  • Platformlar arası tutarlılık

Ayrıca bakın