|
LZW Compression Support
نظرة عامة
تفك HotPDF ترميز تدفقات PDF القديمة التي تستخدم مرشّح LZWDecode ويمكنها عكس متنبئي TIFF أو PNG المصاحبين لتلك المرشّحة عادةً
الميزات الرئيسية
- انتقالات عرض الكود في PDF بقيمتي
EarlyChange=1 وEarlyChange=0
- ترتيب بتات من الأكثر أهمية أو من الأقل أهمية
- إعادة التهيئة عند كود التوضيح، ونهاية المعلومات، والتعامل مع توسّع
KwKwK
- إخراج مباشر إلى
TStream دون بناء سلسلة نتيجة ثانية
- حدود إخراج قابلة للتهيئة وفحوص اختيارية صارمة لكود التوضيح الأولي ونهاية المعلومات
- متنبئ TIFF 2 بعرض 1 أو 2 أو 4 أو 8 أو 16 بت لكل مكوّن
- مرشّحات صفوف PNG: None و Sub و Up و Average و Paeth
- إحصاءات فك ترميز لكل عملية تغطي عرض الأكواد ونمو القاموس وإعادات التهيئة والتوسعات وبايتات المخرجات
الأصناف (Types)
TPDFLZWDecompressor هو صنف فك الترميز القابل لإعادة الاستخدام
TPDFLZWCompressor هو صنف الترميز المقابل
TPDFLZWParms يحمل هندسة المتنبئ الخاصة بـ PDF
TPDFLZWFillOrder يختار ترتيب البتات foTop أو foBottom
EHPDFLZWError يبلّغ عن إدخال مشوه أو هندسة غير مدعومة أو إخفاقات حدود مهيأة
خصائص التهيئة
- يختار
FillOrder ترتيب بتات الضغط
- يختار
EarlyChange قاعدة انتقال عرض القاموس في PDF ويساوي True افتراضيًا
- يتقبل
InitialCodeSize القيم من 2 إلى 9 ويساوي 9 افتراضيًا في PDF
- بالنسبة للأبجديات المختصرة يجب أن يكون كل بايت غير مضغوط أصغر من
1 shl (InitialCodeSize - 1)؛ ويرفع الترميز EHPDFLZWError قبل كتابة المخرجات إذا وقع بايت خارج ذلك المدى
- يوقف
MaxOutputBytes التوسع المفرط قبل تجاوز الحد المهيأ، والصفر يعني بلا حد
- يشترط
RequireInitialClear أن يعيد أول كود تهيئة القاموس
- يرفض
RequireEndOfInformation التدفق الذي ينتهي دون فاصله الختامي
الطرق (Methods)
function Decompress(const Input: AnsiString): AnsiString; overload;
function Decompress(const Input: AnsiString;
Parms: TPDFLZWParms): AnsiString; overload;
function TryDecompress(const Input: AnsiString;
out Output: AnsiString): Boolean; overload;
function TryDecompress(const Input: AnsiString; Parms: TPDFLZWParms;
out Output: AnsiString): Boolean; overload;
function DecompressToStream(const Input: AnsiString;
OutputStream: TStream): Int64;
function DecompressStream(InputStream, OutputStream: TStream;
RestoreInputPosition: Boolean = True): Int64;
- يرفع
Decompress الاستثناء EHPDFLZWError عند إدخال غير صالح
- يعيد
TryDecompress القيمة False ويكشف السبب عبر LastError
- يعيد
DecompressToStream وDecompressStream عدد البايتات المفكوكة المكتوبة
- يقرأ
DecompressStream من موضع الإدخال الحالي ويعيد ذلك الموضع افتراضيًا عندما يكون التدفق قابلًا للتموضع
فك ترميز LZW الأساسي
تُعيد TPDFLZWCompressor.CompressToStream وCompressStream عدد البايتات المرمَّزة المكتوبة، بما فيها كود التوضيح وكود نهاية المعلومات للإدخال الفارغ؛ والإعداد الافتراضي لـ PDF يكتب 3 بايتات لإدخال فارغ
uses
HPDFLZW;
procedure DecompressLZWData;
var
Decompressor: TPDFLZWDecompressor;
CompressedData: AnsiString;
DecompressedData: AnsiString;
begin
Decompressor := TPDFLZWDecompressor.Create;
try
Decompressor.FillOrder := foTop;
Decompressor.EarlyChange := True;
Decompressor.MaxOutputBytes := 64 * 1024 * 1024;
DecompressedData := Decompressor.Decompress(CompressedData);
ProcessDecompressedData(DecompressedData);
finally
Decompressor.Free;
end;
end;
المخرجات إلى تدفقات والتشخيصات
procedure DecodeLZWToStream(const CompressedData: AnsiString;
Destination: TStream);
var
Decompressor: TPDFLZWDecompressor;
begin
Decompressor := TPDFLZWDecompressor.Create;
try
Decompressor.RequireInitialClear := True;
Decompressor.RequireEndOfInformation := True;
Decompressor.DecompressToStream(CompressedData, Destination);
LogDecodeStatistics(
Decompressor.CodesRead,
Decompressor.PeakCodeSize,
Decompressor.PeakDictionarySize,
Decompressor.OutputBytes);
finally
Decompressor.Free;
end;
end;
معاملات المتنبئ
- يعيد
Predictor=1 البايتات المفكوكة دون تغيير
- يعكس
Predictor=2 الاختلاف الأفقي لـ TIFF
- يعكس
Predictor=10..15 وسم مرشّح PNG المخزَّن في بداية كل صف
- تحدد
Colors وBitsPerComponent وColumns هندسة الصف الدقيقة
- يبقى
ExpandedTo8Bit وColorSpace متاحين لأجل التوافق المصدري
إحصاءات فك الترميز
CodesRead وClearCodesRead وDictionaryAdds
KwKwKExpansions وPeakCodeSize وPeakDictionarySize
OutputBytes وEndedWithEndOfInformation
معالجة الأخطاء
- تُرفض الأكواد التي تتجاوز مدخل القاموس التالي
- تُرفض سلاسل البادئات المقطوعة وأول كود غير صالح
- يُرفض الإدخال المقطوع عندما تكون
RequireEndOfInformation مفعّلة
- يُتحقق من توسع المخرجات قبل إصدار كل عبارة
- يجب أن تكون صفوف المتنبئ مكتملة وبهندسة صالحة ووسم صف PNG سليم
انظر أيضًا
|