تخطَّ إلى المحتوى
getnextpdf.com

اللون والملفات التعريفية، ولماذا أحمرك ليس أحمري

Spec: ISO 32000-2, §8.6Spec: ISO 15930, PDF/X

اللون في ملف ⁨PDF⁩ ليس إحساسًا ثابتًا. إنه تعليمة، وما إذا كانت تلك التعليمة ستُنتج الأحمر نفسه على حاسوبك المحمول، وعلى الهاتف، وعلى مطبعة، يعتمد كليًّا على كيفية وصف اللون. تتناول هذه الصفحة الفرق بين لون لا يفعل سوى إخبار الجهاز بما يجب فعله، ولون يقول كيف ينبغي أن يبدو فعلًا.

اختر أحمر علامة تجارية. عيّنه مرة واحدة. الآن انظر إليه على شاشة مكتبية رخيصة، ثم على هاتف ⁨OLED⁩ في غرفة ساطعة، ثم في نسخة مسحوبة من مطبعة أوفست. ثلاثة ألوان حمراء. أحيانًا ثلاثة ألوان حمراء مختلفة بوضوح. لم يغيّر أحد الرقم؛ ولم يكن الرقم قطّ هو القصة كاملة.

بالنسبة إلى مستند عابر، هذا أمر لا يستحق الاكتراث. أمّا بالنسبة إلى شعار، أو ملصق خاضع للتنظيم، أو صورة فوتوغرافية في كتالوج، أو سجلّ يُراد له أن يبقى لعقود، فاللون المنحرف عيب. والكلفة ليست مجرّدة: إنها إعادة طباعة، أو نموذج مرفوض، أو أرشيف لم تعد صفحاته تطابق الأصول. والحل ليس رقمًا أفضل. إنه قول الحقيقة بشأن ما يعنيه الرقم.

  • اللون المعتمد على الجهاز يسمّي لونًا بقيم التحكم التي يتلقّاها الجهاز، فتكون النتيجة هي ما يصنعه ذلك الجهاز منها (Spec: ISO 32000-2, §8.6.4). إنّ DeviceRGB وDeviceCMYK وDeviceGray هي فضاءات ألوان معتمدة على الجهاز. الأرقام نفسها، وعتاد مختلف، ولون مختلف.
  • اللون المُعاير القائم على ⁨ICC⁩ يربط تلك الأرقام بمرجع مقيس مستقل عن الجهاز عبر ملف تعريفي مضمَّن (Spec: ISO 32000-2, §8.6.5.5). يحمل المستند الآن من المعلومات ما يكفي لإعادة إنتاج اللون المقصود، لا مجرّد وصفة من قيم التحكم.
  • ملف ⁨ICC⁩ التعريفي هو ذلك التخطيط المقيس: كيف ترتبط أرقام جهاز ما — أو أرقام فضاء لون قياسي أو حالة إخراج — باللون الذي تدركه عين الإنسان، مُثبَّتًا في فضاء وصل مستقل عن الجهاز.
  • نيّة التصيير هي السياسة المتّبعة عندما يقع لون خارج نطاق متناول جهاز ما، إذ لا يستطيع أي جهاز إظهار كل لون.
  • نيّة الإخراج هي إعلان المستند، مسبقًا، عن حالة الإخراج التي أُعدّ من أجلها (Spec: ISO 32000-2, §14.11.5). تعتمد عليها مسارات العمل ذات الدرجة الطباعية (⁨PDF/X⁩) والأرشيفية (⁨PDF/A⁩).

كيف يتعامل ⁨NextPDF⁩ مع الأمر

قسم بعنوان «كيف يتعامل ⁨NextPDF⁩ مع الأمر»

ابدأ بالنسخة الصادقة من المشكلة. إنّ DeviceRGB لا يحتوي على لون. إنه يحتوي على ثلاثة أرقام بين 0 و1 وافتراض غير منطوق به بأنّ شاشةً ما ستحوّلها إلى ضوء. شاشتان لهما إضاءة خلفية مختلفة، ولوحات مختلفة، ومعايرة مختلفة، ستحوّلان الأرقام الثلاثة نفسها إلى ضوء مختلف على نحو مرئي. هذا ليس خللًا في ⁨PDF.⁩ إنه ما يعنيه “اللون المعتمد على الجهاز”، والمواصفة صريحة في ذلك: تُعرَّف فضاءات الألوان المعتمدة على الجهاز بالقيم التي يتلقّاها الجهاز، لا بمظهر مطلق (Spec: ISO 32000-2, §8.6.4).

يسدّ اللون المُعاير تلك الفجوة بإضافة مرجع. ملف ⁨ICC⁩ التعريفي هو ناتج توصيف جهاز أو فضاء لون — شاشة، أو طابعة، أو مطبعة، أو فضاء قياسي مثل ⁨sRGB⁩ — وتسجيل كيف ترتبط أرقامه الخام باللون في فضاء وصل مستقل عن الجهاز يقارب رؤية الإنسان. ضمّن ذلك الملف التعريفي، فتكفّ الأرقام عن أن تكون لهجة خاصة؛ وتصبح تصريحًا مثبَّتًا في شيء يمكن للجميع الاتفاق عليه. وهذا هو بالضبط ما يحمله فضاء لون قائم على ⁨ICC⁩ (Spec: ISO 32000-2, §8.6.5.5): اللون، إضافةً إلى التخطيط المقيس الذي يقول ما يعنيه.

ثمة عقبة ثانية لا مفرّ منها. مجموعة الألوان التي تستطيع مطبعة طباعتها ليست المجموعة التي يستطيع هاتف عرضها، ولا أيٌّ منهما المجموعة الكاملة التي تستطيع عين الإنسان رؤيتها. عندما يقع لون خارج ما يستطيع جهاز مستهدَف إعادة إنتاجه، يجب اتخاذ خيار ما: اقتطاعه إلى أقرب لون يمكن بلوغه، أو إزاحة نطاق كامل من الألوان معًا كي تبقى علاقاتها سليمة. ذلك الخيار هو نيّة التصيير — سياسة مقصودة، تُختار للمهمّة، لا حادثة تقريب. كثيرًا ما تتطلّب صورة فوتوغرافية وشعار شركة نيّتين مختلفتين، لأنّ إحداهما تعنى بالتدرّجات السلسة، والآخر يعنى بمطابقة عيّنة لون محدّدة بدقّة.

أخيرًا، المستند المتّجه إلى وجهة محدّدة يمكنه أن يقول ذلك. نيّة الإخراج هي إعلان الملف عن حالة الإخراج التي أُعدّ من أجلها — وهي عادةً ملف ⁨ICC⁩ تعريفي وجهة مضمَّن يسمّي حالة طباعة أو جهازًا (Spec: ISO 32000-2, §14.11.5). إنه الفرق بين تسليم طابعة ملفًا، وتسليمها ملفًا يقول “بُنيتُ من أجل هذه المطبعة.” تجعلها ملفات تبادل الطباعة إلزامية: يلزم أن يحمل ملف ⁨PDF/X⁩ (عائلة ⁨ISO 15930⁩) نيّة إخراج (Spec: ISO 15930, PDF/X)، وتعتمد ⁨PDF/A⁩ على الآلية نفسها كي تبقى الألوان المعتمدة على الجهاز في ملف مؤرشَف قابلةً للتفسير في المستقبل البعيد، بعد زمن طويل من زوال البيئة الأصلية.

  1. Name the colourChoose a colour space. DeviceRGB/CMYK/Gray name control values; an ICC-based space anchors them to a device-independent reference (ISO 32000-2 §8.6).
  2. Anchor it (optional but decisive)Embed an ICC profile so the numbers carry their measured meaning, not just a device recipe (ISO 32000-2 §8.6.5.5).
  3. Reconcile to the deviceA rendering intent decides what happens to colours the target device cannot reproduce — clip the nearest, or shift the range to preserve relationships.
  4. Declare the destinationAn output intent states the output condition the document was prepared for, as PDF/X and PDF/A workflows require (ISO 32000-2 §14.11.5).
How a color travels from your code to a faithful result: it is named in a colour space, optionally anchored to a measured reference by an ICC profile, reconciled to the target device through a rendering intent, and interpreted against the output condition the document declares.

مهمّة ⁨NextPDF⁩ في هذه السلسلة هي أن يكون مطابقًا للمواصفات: أن يكتب فضاءات الألوان، والملفات التعريفية المضمَّنة، ونوايا الإخراج بالطريقة التي يعرّفها بها التنسيق، كي تقرأ أداة لاحقة — مُعالج تصيير الطابعة (⁨RIP⁩)، أو مُصدِّق أرشيفي، أو عارض — ما قُصِد بالضبط. إنه ينتج التصريحات؛ ولا يتظاهر بأنه الجهاز.

يرسم الشكل أدناه القرار، لا واجهة برمجية محدّدة. والمقصود أنّ الوجهة مُعلَنة، لا مخمَّنة.

<?php
declare(strict_types=1);
use NextPDF\Contracts\PdfDocumentInterface;
/**
* Prepare a print-bound document that declares its intended output condition.
*
* The colour numbers alone do not fix the appearance. Declaring the output
* intent — the print condition the file was built for — is what lets a press
* interpret those numbers faithfully (ISO 32000-2 §14.11.5).
*
* @param PdfDocumentInterface $doc A composed document.
* @param string $iccProfileBytes The destination ICC profile for the
* target print condition.
*
* @return string The document bytes, carrying a declared output intent.
*/
function prepareForPress(
PdfDocumentInterface $doc,
string $iccProfileBytes,
): string {
// Declare the output condition explicitly. The document now states the
// device/print condition it was prepared for, instead of leaving its
// device colours open to interpretation.
$doc->setOutputIntent(
identifier: 'Custom press condition',
iccProfile: $iccProfileBytes,
);
return $doc->output();
}

لم تتغيّر الألوان. ما تغيّر هو أنّ الملف يقول الآن كيف كان يُراد لها أن تبدو، وهو الشيء الوحيد الذي يستطيع مطبعة أو مُصدِّق التصرّف بناءً عليه.

“إنها قيمة ست عشرية نفسها، إذًا إنه اللون نفسه.” قيمة الست عشري مجموعة من قيم التحكم المعتمدة على الجهاز. من دون ملف تعريفي أو نيّة إخراج، إنها وصفة من دون مطبخ محدّد — سيكون مذاقها مختلفًا في كل مطبخ. يمكن لملفين أن يحملا أرقام ⁨RGB⁩ متطابقة ويكونا بصدق لونين مختلفين، لأنّ أحدهما يعلن السياق الذي يمنح الأرقام معنى، والآخر يترك ذلك للصدفة.

فخّ ثانٍ: افتراض أنّ DeviceCMYK يعني تلقائيًا “جاهز للطباعة.” إنه لا يعني ذلك. ⁨CMYK⁩ لا يزال لونًا معتمدًا على الجهاز؛ إنه مصاغ على هيئة المطبعة، لكنه ليس مُعايرًا حتى يسمّي ملف تعريفي أو نيّة إخراج حالة المطبعة الفعلية.

ينتج ⁨NextPDF⁩ لونًا مطابقًا للمواصفات: يكتب فضاءات الألوان المعتمدة على الجهاز والقائمة على ⁨ICC⁩ ويعلن نوايا الإخراج لمسارات عمل من نمط ⁨PDF/X⁩ ولمسارات ⁨PDF/A⁩، بالطريقة التي يعرّفها بها التنسيق. ذلك هو الشطر المُنتِج من المهمّة، وهو الشطر الذي يستطيع مستند امتلاكه.

ما ليس عليه ⁨NextPDF⁩ هو أنه نظام تدقيق ألوان. إنه لا يقيس شاشتك، ولا يحاكي مطبعة على الشاشة، ولا يصادق على أنّ النتيجة المطبوعة تطابق عيّنة لون مقصودة ضمن حدّ تسامح. تلك أمور تخصّ سلسلة تدقيق مُدارة الألوان والأشخاص الذين يديرونها. يجعل المحرّك الملف يقول الشيء الصحيح؛ أمّا ما إذا كان الجهاز النهائي سيحترمه فيُقرَّر لاحقًا، بفعل الجهاز، وملفات ⁨ICC⁩ التعريفية المعنيّة، و — في حالة ⁨PDF/X⁩ و⁨PDF/A⁩ — مُصدِّق، لا المُنتِج.

  • فضاء لون معتمد على الجهاز — لون يُسمّى بقيم التحكم التي يتلقّاها جهاز (DeviceRGB وDeviceCMYK وDeviceGray)؛ ويعتمد المظهر على الجهاز المُفسِّر (⁨ISO 32000-2 §8.6.4⁩).
  • اللون المُعاير / القائم على ⁨ICC⁩ — لون مثبَّت في مرجع مستقل عن الجهاز عبر ملف ⁨ICC⁩ تعريفي مضمَّن، كي يكون المظهر المقصود قابلًا لإعادة الإنتاج عبر الأجهزة (⁨ISO 32000-2 §8.6.5.5⁩).
  • ملف ⁨ICC⁩ التعريفي — تخطيط مقيس بين أرقام جهاز محدّد ومرجع مستقل عن الجهاز يقارب رؤية الإنسان.
  • نيّة التصيير — سياسة التعامل مع الألوان التي لا يستطيع جهاز مستهدَف إعادة إنتاجها: اقتطاع إلى أقرب لون يمكن بلوغه، أو إزاحة نطاق للحفاظ على علاقات الألوان.
  • نيّة الإخراج — إعلان المستند عن حالة الإخراج التي أُعدّ من أجلها، عادةً عبر ملف ⁨ICC⁩ تعريفي وجهة مضمَّن (⁨ISO 32000-2 §14.11.5⁩)؛ وهي مطلوبة في ⁨PDF/X⁩ ومستخدَمة في ⁨PDF/A⁩.
  • ⁨PDF/X⁩ — عائلة ملف تبادل الطباعة ⁨ISO 15930⁩ في ⁨PDF⁩؛ يجب أن يحمل ملف ⁨PDF/X⁩ نيّة إخراج تسمّي حالة الطباعة المستهدَفة.