هذه صفحة لقطة ثنائية اللغة تم حفظها بواسطة المستخدم في 2025-7-3 2:02 لـ https://app.immersivetranslate.com/pdf-pro/c67de12f-866f-49ac-a124-f01c2a432a4e/، مقدمة بدعم ثنائي اللغة من قبل الترجمة الغامرة. تعلم كيفية الحفظ؟

7.4.3 ASCII85 مرشح فك التشفير

يقوم عامل تصفية ASCII85Decode بفك تشفير البيانات التي تم ترميزها في ترميز ASCII base-85 وإنتاج بيانات ثنائية. تصف الفقرات التالية عملية تشفير البيانات الثنائية في ASCII base-85 ؛ يعكس عامل تصفية ASCII85Decode هذه العملية.
يجب أن يستخدم ترميز ASCII base-85 أحرف ASCII! من خلال u ( ( 21 h ) ( 75 h ) ) u ( ( 21 h ) ( 75 h ) ) u((21h)-(75h))\mathrm{u}((21 \mathrm{~h})-(75 \mathrm{~h})) والحرف z (7Ah) ، مع التسلسل المكون من حرفين ∼> ∼> ∼>\sim> (7Eh) (3Eh) كعلامة التخلص من الذخائر المتفجرة. يجب أن يتجاهل عامل تصفية ASCII85Decode جميع أحرف المسافات البيضاء (انظر 7.2 ، "الاصطلاحات المعجمية"). أي أحرف أخرى وأي تسلسلات أحرف تمثل مجموعات مستحيلة في ترميز ASCII base-85 يجب أن تتسبب في حدوث خطأ.
على وجه التحديد ، يجب أن ينتج ترميز ASCII base-85 5 أحرف ASCII لكل 4 بايت من البيانات الثنائية. وتحول كل مجموعة من 4 بايتات إدخال ثنائية، ( b 1 b 2 b 3 b 4 b 1 b 2 b 3 b 4 b_(1)b_(2)b_(3)b_(4)b_{1} b_{2} b_{3} b_{4} )، إلى مجموعة من 5 بايتات إخراج، ( c 1 c 2 c 3 c 4 c 5 c 1 c 2 c 3 c 4 c 5 c_(1)c_(2)c_(3)c_(4)c_(5)c_{1} c_{2} c_{3} c_{4} c_{5} )، باستخدام العلاقة
( b 1 × 256 3 ) + ( b 2 × 256 2 ) + ( b 3 × 256 1 ) + b 4 = ( c 1 × 85 4 ) + ( c 2 × 85 3 ) + ( c 3 × 85 2 ) + ( c 4 × 85 1 ) + c b 1 × 256 3 + b 2 × 256 2 + b 3 × 256 1 + b 4 = c 1 × 85 4 + c 2 × 85 3 + c 3 × 85 2 + c 4 × 85 1 + c {:[(b_(1)xx256^(3))+(b_(2)xx256^(2))+(b_(3)xx256^(1))+b_(4)=],[quad(c_(1)xx85^(4))+(c_(2)xx85^(3))+(c_(3)xx85^(2))+(c_(4)xx85^(1))+c]:}\begin{aligned} & \left(b_{1} \times 256^{3}\right)+\left(b_{2} \times 256^{2}\right)+\left(b_{3} \times 256^{1}\right)+b_{4}= \\ & \quad\left(c_{1} \times 85^{4}\right)+\left(c_{2} \times 85^{3}\right)+\left(c_{3} \times 85^{2}\right)+\left(c_{4} \times 85^{1}\right)+c \end{aligned}
بمعنى آخر ، يجب تفسير 4 بايت من البيانات الثنائية على أنها رقم أساسي 256 ثم يتم تحويلها إلى رقم أساسي 85. يجب بعد ذلك تحويل البايتات الخمسة من الرقم الأساسي 85 إلى أحرف ASCII بإضافة 33 (رمز ASCII للحرف!) إلى كل منها. يجب أن تحتوي البيانات المشفرة الناتجة على أحرف ASCII قابلة للطباعة فقط مع رموز في النطاق 33 (!) إلى 117 (u). كحالة خاصة ، إذا كانت جميع البايتات الخمسة هي 0 ، فيجب تمثيلها بالحرف مع الرمز 122 ( z ) 122 ( z ) 122(z)122(\mathrm{z}) بدلا من خمس علامات تعجب (!!).
وإذا لم يكن طول البيانات المراد تشفيرها مضاعفا ل 4 بايتات، تستعمل المجموعة الجزئية الأخيرة المكونة من 4 لإنتاج مجموعة جزئية أخيرة من 5 أحرف ناتج. بالنظر n ( 1 , 2 n ( 1 , 2 n(1,2n(1,2 إلى ، أو 3 ) ) )) بايت من البيانات الثنائية ، يجب على المشفر أولا إلحاق 4 n 4 n 4-n4-n صفر بايت لتكوين مجموعة كاملة من 4. يجب أن تشفر هذه المجموعة بالطريقة المعتادة ، ولكن لا تطبق الحالة الخاصة z z zz . أخيرا ، يجب أن يكتب فقط الأحرف الأولى n + 1 n + 1 n+1n+1 من المجموعة الناتجة المكونة من 5. يجب أن تتبع هذه الأحرف مباشرة علامة ∼> ∼> ∼>\sim> التخلص من الذخائر المتفجرة.
لا تحدث الشروط التالية أبدا في تسلسل بايت مشفر بشكل صحيح:
  • القيمة التي تمثلها مجموعة من 5 أحرف أكبر من 2 32 1 2 32 1 2^(32)-12^{32}-1 .
  • يحدث حرف z في منتصف المجموعة.
  • تحتوي المجموعة الجزئية النهائية على حرف واحد فقط.

7.4.4 مرشحات LZWDecode و FlateDecode

  7.4.4.1 عام

تشترك مرشحات LZWDecode و (PDF 1.2) FlateDecode في الكثير من القواسم المشتركة ويتم مناقشتها معا في هذه الجملة الفرعية. يقومون بفك تشفير البيانات التي تم ترميزها باستخدام طريقة ضغط البيانات LZW أو Flate ، على التوالي:
  • LZW (Lempel-Ziv-Welch) هي طريقة ضغط تكيفية متغيرة الطول تم اعتمادها كإحدى طرق الضغط القياسية في معيار تنسيق ملف صورة العلامة (TIFF). للحصول على تفاصيل حول ترميز LZW، انظر 7.4.4.2، "تفاصيل ترميز LZW".
  • تعتمد طريقة Flate على طريقة ضغط zlib / deflate للمجال العام ، وهي طريقة ضغط تكيفي متغيرة الطول Lempel-Ziv متتالية مع ترميز Huffman التكيفي. تم تعريفه بالكامل في RFCs على الإنترنت 1950 ، ومواصفات تنسيق البيانات المضغوطة ZLIB ، و 1951 ، مواصفات تنسيق البيانات المضغوطة DEFLATE (انظر المراجع).
تقوم كلتا الطريقتين بضغط البيانات الثنائية أو نص ASCII ولكن (مثل جميع طرق الضغط) تنتج دائما بيانات ثنائية ، حتى لو كانت البيانات الأصلية نصا.
يمكن لطرق ضغط LZW و Flate اكتشاف واستغلال العديد من الأنماط في بيانات الإدخال ، سواء كانت البيانات نصا أو صورا. كما هو موضح لاحقا، يدعم كلا المرشحين التحويل الاختياري بواسطة وظيفة التنبؤ، مما يحسن ضغط بيانات الصورة التي تم أخذ عينات منها.
ملاحظة 1 نظرا لترميز هوفمان التكيفي المتتالي ، فإن الإخراج المشفر ب Flate عادة ما يكون أكثر إحكاما من الإخراج المشفر ب LZW لنفس الإدخال. سرعات فك تشفير Flate و LZW قابلة للمقارنة ، لكن ترميز Flate أبطأ بكثير من ترميز LZW.
ملاحظة 2 عادة ما تضغط كل من ترميزات Flate وLZW على إدخال مدخلاتها إلى حد كبير. ومع ذلك ، في أسوأ الحالات (حيث لا يظهر أي زوج من البايتات المجاورة مرتين) ، يوسع ترميز Flate مدخلاته بما لا يزيد عن 11 بايت أو عامل 1.003 (أيهما أكبر) ، بالإضافة إلى تأثيرات علامات الخوارزمية المضافة بواسطة تنبؤات PNG. بالنسبة لترميز LZW ، توفر أفضل حالة (جميع الأصفار) ضغطا يقترب من 1365: 1 للملفات الطويلة ، ولكن التوسع الأسوأ هو على الأقل عامل 1.125 ، والذي يمكن أن يزيد إلى ما يقرب من 1.5 في بعض التطبيقات ، بالإضافة إلى تأثيرات علامات PNG كما هو الحال مع ترميز Flate.

7.4.4.2 تفاصيل ترميز LZW

يجب أن تتكون البيانات المشفرة باستخدام طريقة ضغط LZW من سلسلة من الرموز التي يتراوح طولها من 9 إلى 12 بت. يجب أن يمثل كل رمز حرفا واحدا من بيانات الإدخال (0-255) ، أو علامة جدول واضح (256) ، أو علامة التخلص من الذخائر المتفجرة (257) ، أو إدخال جدول يمثل تتابعا متعدد الأحرف تمت مواجهته سابقا في المدخل (258 أو أكثر).
في البداية ، يجب أن يكون طول الشفرة 9 بتات ويجب أن يحتوي جدول LZW فقط على مدخلات للشفرات الثابتة 258. ومع استمرار التشفير، تلحق المدخلات بالجدول مع ربط الرموز الجديدة بتتابعات أطول وأطول من أحرف الإدخال. يجب أن يحتفظ المشفر ومفكك التشفير بنسخ متطابقة من هذا الجدول.
عندما يدرك كل من المشفر ومفكك التشفير بشكل مستقل (ولكن بشكل متزامن) أن طول الشفرة الحالي لم يعد كافيا لتمثيل عدد المدخلات في الجدول ، فيجب أن يزيدا عدد البتات لكل شفرة بمقدار 1 . يجب أن يكون رمز الإخراج الأول الذي يبلغ طوله 10 بتات هو الذي يتبع إنشاء إدخال الجدول 511 ، وبالمثل ل 11 (1023) و 12 (2047) بت. يجب ألا تزيد الرموز عن 12 بت. لذلك ، فإن الإدخال 4095 هو آخر إدخال في جدول LZW.
يجب على المشفر تنفيذ التسلسل التالي من الخطوات لإنشاء كل شفرة إخراج:
أ) تجميع سلسلة من حرف إدخال واحد أو أكثر مطابقة لتسلسل موجود بالفعل في الجدول. للحصول على أقصى قدر من الضغط ، يبحث برنامج التشفير عن أطول تسلسل من هذا القبيل.
ب) إصدار الشفرة المقابلة لهذا التسلسل.
ج) إنشاء إدخال جدول جديد لأول رمز غير مستخدم. قيمته هي التسلسل الموجود في الخطوة (أ) متبوعا بحرف الإدخال التالي.
مثال 1 لنفترض أن الإدخال يتكون من التسلسل التالي لرموز أحرف ASCII:
45454545456545454566
بدءا من جدول فارغ ، يستمر التشفير كما هو موضح في الجدول 7.
الجدول 7 - تسلسل تشفير LZW النمطي
  تسلسل الإدخال   كود الإخراج تمت إضافة التعليمات البرمجية إلى الجدول التسلسل الذي يمثله رمز جديد
-   256 (جدول واضح) - -
45 45 258 4545
4545 258 259 454545
Input sequence Output code Code added to table Sequence represented by new code - 256 (clear-table) - - 45 45 258 4545 4545 258 259 454545| Input sequence | Output code | Code added to table | Sequence represented by new code | | :--- | :--- | :--- | :--- | | - | 256 (clear-table) | - | - | | 45 | 45 | 258 | 4545 | | 4545 | 258 | 259 | 454545 |
الجدول 7 - تسلسل تشفير LZW النموذجي (تابع)
  تسلسل الإدخال   كود الإخراج تمت إضافة التعليمات البرمجية إلى الجدول التسلسل الذي يمثله رمز جديد
4545 258 260 454565
65 65 261 6545
454545 259 262 45454566
66 66 - -
-   257 (التخلص من الذخائر المتفجرة) - -
Input sequence Output code Code added to table Sequence represented by new code 4545 258 260 454565 65 65 261 6545 454545 259 262 45454566 66 66 - - - 257 (EOD) - -| Input sequence | Output code | Code added to table | Sequence represented by new code | | :--- | :--- | :--- | :--- | | 4545 | 258 | 260 | 454565 | | 65 | 65 | 261 | 6545 | | 454545 | 259 | 262 | 45454566 | | 66 | 66 | - | - | | - | 257 (EOD) | - | - |
يجب تعبئة الرموز في تيار بتات مستمر ، بت عالي الترتيب أولا. ثم ينقسم هذا الدفق إلى بايت، بت عالي الترتيب أولا. وبالتالي ، قد تمتد الرموز على حدود البايت بشكل تعسفي. بعد علامة التخلص من الذخائر المتفجرة (قيمة الكود 257) ، يجب ضبط أي بتات متبقية في البايت النهائي على 0 .
في المثال أعلاه ، يبلغ طول جميع رموز الإخراج 9 بت. سيتم تعبئتها في وحدات بايت على النحو التالي (ممثلة بالسداسي العشري):
مثال 2 80 2 80 2quad802 \quad 80 OB 605022 OC OC 8501
للتكيف مع تتابعات الإدخال المتغيرة ، قد يصدر المشفر في أي وقت شفرة جدول واضح ، مما يؤدي إلى إعادة تشغيل كل من المشفر ووحدة فك التشفير مع الجداول الأولية وطول التعليمات البرمجية 9 بتات. يجب أن يبدأ المشفر بإصدار رمز واضح الجدول. ويصدر رمز واضح للجدول عندما يصبح الجدول ممتلئا؛ قد تفعل ذلك عاجلا.

7.4.4.3 معلمات LZWdecode و FlateDecode

يجب أن تقبل مرشحات LZWDecode و FlateDecode المعلمات الاختيارية للتحكم في عملية فك التشفير.
ملاحظة: ترتبط معظم هذه المعلمات بالتقنيات التي تقلل من حجم الصور المضغوطة التي تم أخذ عينات منها (مصفوفات مستطيلة لقيم الألوان، موصوفة في 8.9، "الصور"). على سبيل المثال ، عادة ما تتغير بيانات الصورة قليلا جدا من عينة إلى أخرى. لذلك ، يمكن أن يؤدي طرح قيم العينات المجاورة (عملية تسمى الاختلاف) ، وترميز الاختلافات بدلا من قيم العينة الأولية ، إلى تقليل حجم بيانات الإخراج. علاوة على ذلك ، عندما تحتوي بيانات الصورة على عدة مكونات لونية (أحمر - أخضر - أزرق أو سماوي - أرجواني - أصفر-أسود) لكل عينة ، فإن أخذ الفرق بين قيم المكونات المقابلة في العينات المجاورة ، بدلا من مكونات الألوان المختلفة في نفس العينة ، غالبا ما يقلل من حجم بيانات الإخراج.
يوضح الجدول 8 المعلمات التي يمكن تحديدها اختياريا لمرشحات LZWDecode وFlateDecode. ما لم يذكر خلاف ذلك، يجب أن تتطابق جميع القيم المقدمة إلى مرشاح فك التشفير لأي معلمات اختيارية مع القيم المستخدمة عند تشفير البيانات.
الجدول 8 - المعلمات الاختيارية لمرشحات LZWDecode وFlateDecode
  مفتاح   نوع   قيمة
  المتنبئ   العدد الصحيح رمز يحدد خوارزمية التنبؤ، إن وجدت. إذا كانت قيمة هذا الإدخال 1 ، فيجب أن يفترض المرشاح أن الخوارزمية العادية قد استخدمت لتشفير البيانات ، دون التنبؤ. إذا كانت القيمة أكبر من 1 ، فيجب أن يفترض المرشح أن البيانات قد تم اختلافها قبل تشفيرها ، ويحدد المتنبئ خوارزمية التنبؤ. لمزيد من المعلومات حول قيم التنبؤ الأكبر من 1، راجع 7.4.4.4، "وظائف التنبؤ ب LZW وFlate". القيمة الافتراضية: 1.
  الوان   العدد الصحيح (يمكن استخدامه فقط إذا كان Predictor أكبر من 1) عدد مكونات الألوان المتشابكة لكل عينة. القيم الصالحة هي من 1 إلى 4 (PDF 1.0) و1 أو أكبر (PDF 1.3). القيمة الافتراضية: 1.
Key Type Value Predictor integer A code that selects the predictor algorithm, if any. If the value of this entry is 1, the filter shall assume that the normal algorithm was used to encode the data, without prediction. If the value is greater than 1 , the filter shall assume that the data was differenced before being encoded, and Predictor selects the predictor algorithm. For more information regarding Predictor values greater than 1, see 7.4.4.4, "LZW and Flate Predictor Functions." Default value: 1. Colors integer (May be used only if Predictor is greater than 1) The number of interleaved colour components per sample. Valid values are 1 to 4 (PDF 1.0) and 1 or greater (PDF 1.3). Default value: 1.| Key | Type | Value | | :--- | :--- | :--- | | Predictor | integer | A code that selects the predictor algorithm, if any. If the value of this entry is 1, the filter shall assume that the normal algorithm was used to encode the data, without prediction. If the value is greater than 1 , the filter shall assume that the data was differenced before being encoded, and Predictor selects the predictor algorithm. For more information regarding Predictor values greater than 1, see 7.4.4.4, "LZW and Flate Predictor Functions." Default value: 1. | | Colors | integer | (May be used only if Predictor is greater than 1) The number of interleaved colour components per sample. Valid values are 1 to 4 (PDF 1.0) and 1 or greater (PDF 1.3). Default value: 1. |