PPM Format Specification(5) File Formats Manual PPM Format Specification(5)

ppm - قالب تصویر رنگی Netpbm

این برنامه بخشی از Netpbm(1) است.

قالب PPM یک قالب فایل تصویر رنگی با کمترین مخرج مشترک (ساده‌ترین سطح سازگاری) است.

باید اشاره کرد که این قالب به طرز فاحشی ناکارآمد است. این قالب دارای افزونگی بسیار بالایی است و در عین حال حاوی داده‌های زیادی است که چشم انسان حتی قادر به تشخیص آن‌ها نیست. علاوه بر این، قالب مذکور اطلاعات بسیار اندکی پیرامون تصویر به جز رنگ پایه‌ای فراهم می‌کند، بدین معنا که ممکن است برای استفاده مناسب مجبور باشید فایلی در این قالب را با اطلاعات مستقل دیگری ادغام کنید. با این وجود، نوشتن و تحلیل برنامه‌ها برای پردازش این قالب بسیار ساده است و هدف اصلی نیز همین است.

همچنین باید توجه داشت که فایل‌ها اغلب از هر حیث با این قالب سازگارند به جز معناشناسی دقیق مقادیر نمونه‌ها. این فایل‌ها به دلیل شیوه استفاده از PPM به عنوان یک قالب واسط کاربرد دارند. آن‌ها به شکل غیررسمی فایل‌های PPM نامیده می‌شوند، اما برای دقت کامل باید میزان تفاوت با PPM واقعی را مشخص کنید؛ به عنوان نمونه، «PPM با استفاده از رنگ‌های قرمز، سبز و آبی که پویشگر (اسکنر) مورد بحث به کار می‌برد.»

نام «PPM» مخففی برگرفته از «Portable Pixel Map» (نگاشت تصویردانه‌ای قابل حمل) است. تصاویر در این قالب (یا پیش‌ساز آن) در گذشته «portable pixmaps» نیز نامیده می‌شدند.

تعریف قالب به شرح زیر است. می‌توانید از کتابخانه زیربرنامه C به نام libnetpbm(1) برای خواندن و تفسیر آسان و دقیق قالب استفاده کنید.

یک فایل PPM شامل دنباله‌ای از یک یا چند تصویر PPM است. هیچ داده، جداکننده یا فاصله‌گذاری قبل، بعد یا میان تصاویر وجود ندارد.

هر تصویر PPM از بخش‌های زیر تشکیل شده است:

  • یک «عدد جادویی» برای شناسایی نوع فایل. عدد جادویی تصویر ppm دو نویسه «P6» است.
  • نویسه فاصله‌گذار (فاصله‌ها، تب‌ها، بازگشت به ابتدای سطر، سطر جدید).
  • عرض، فرمت‌بندی شده به صورت نویسه‌های اسکی در مبنای ۱۰.
  • نویسه فاصله‌گذار.
  • ارتفاع، مجدداً به صورت نویسه‌های اسکی در مبنای ۱۰.
  • نویسه فاصله‌گذار.
  • بیشترین مقدار رنگ (Maxval)، باز هم به صورت اسکی در مبنای ۱۰. باید کمتر از ۶۵۵۳۶ و بیشتر از صفر باشد.
  • یک نویسه فاصله‌گذار واحد (معمولاً سطر جدید).
  • یک رستر از سطرهای ارتفاع، به ترتیب از بالا به پایین. هر سطر شامل پیکسل‌های عرض، به ترتیب از چپ به راست است. هر پیکسل یک سه‌تایی از نمونه‌های قرمز، سبز و آبی به همین ترتیب است. هر نمونه به صورت باینری محض با ۱ یا ۲ بایت نشان داده می‌شود. اگر Maxval کمتر از ۲۵۶ باشد، ۱ بایت است؛ در غیر این صورت ۲ بایت است. باارزش‌ترین بایت ابتدا قرار می‌گیرد.

    یک سطر از تصویر افقی است. یک ستون عمودی است. پیکسل‌ها در تصویر مربع و پیوسته هستند.

    در رستر، مقادیر نمونه‌ها «غیرخطی» هستند. آن‌ها متناسب با شدت رنگ‌های قرمز، سبز و آبی توصیه ITU-R BT.709 در پیکسل هستند که با تابع تبدیل گامای BT.709 تنظیم شده‌اند. (آن تابع انتقال عدد گامای ۲٫۲ را مشخص می‌کند و دارای یک بخش خطی برای شدت‌های کوچک است). مقدار Maxval برای هر سه نمونه نمایانگر سفید CIE D65 و شدیدترین رنگ در گستره رنگی است که تصویر بخشی از آن است (گستره رنگی تمام رنگ‌ها در تمامی تصاویری است که ممکن است این تصویر با آن‌ها مقایسه شود).

    محدوده مقادیر کانال BT.709 (۱۶-۲۴۰) به PPM ارتباطی ندارد.

    توصیه ITU-R BT.709 تغییر نامی از توصیه پیشین CCIR 709 است. هنگامی که CCIR در حدود سال ۲۰۰۰ در سازمان مادر خود، یعنی ITU ادغام شد، نام استاندارد تغییر کرد. این سند در گذشته به این استاندارد تحت عنوان CIE Rec. 709 اشاره می‌کرد، اما امروزه مشخص نیست که آیا CIE هرگز حامی چنین استانداردی بوده است یا خیر.

    توجه داشته باشید که فضای رنگی محبوب دیگر، استاندارد جدیدتر sRGB است. یک تفاوت رایج نسبت به PPM، جایگزینی این فضای رنگی با فضای رنگی مشخص‌شده است. می‌توانید از ?Bpnmgamma?P برای تبدیل میان این نسخه و PPM واقعی استفاده کنید.

    دقت کنید که یک تغییر رایج نسبت به قالب PPM این است که مقادیر نمونه «خطی» باشند، یعنی همان‌طور که در بالا مشخص شده بدون تنظیمات گاما. برنامه ?Bpnmgamma?P چنین نسخه‌ای از PPM را به عنوان ورودی دریافت کرده و یک PPM واقعی را در خروجی تولید می‌کند.

رشته‌هایی که با «#» آغاز می‌شوند ممکن است توضیحات (کامنت) باشند، درست همانند PBM(1).

توجه داشته باشید که می‌توانید از ?Bpamdepth?P برای تبدیل بین قالب ۱ بایت به ازای هر نمونه و قالب ۲ بایت به ازای هر نمونه استفاده کنید.

تمام نویسه‌های اشاره‌شده در اینجا در قالب اسکی (ASCII) کدگذاری شده‌اند. منظور از «سطر جدید» (newline) نویسه‌ای است که در اسکی با نام Line Feed یا LF شناخته می‌شود. نویسه «فاصله‌گذار» (whitespace) شامل فاصله، CR ،LF ،TAB ،VT یا FF است (یعنی آنچه تابع استاندارد ANSI C به نام isspace() آن را فاصله‌گذار می‌نامد).

قالب PPM به قدری ساده است که بسیاری از برنامه‌نویسان برنامه‌هایی می‌نویسند تا آن را مستقیماً پردازش کنند، بدون استفاده از کتابخانه‌ای مانند ?Blibnetpbm?P، و با مهندسی معکوس زیرمجموعه‌ای از قالب از طریق مثال‌ها به جای استفاده از مشخصات رسمی. بنابراین، اگر می‌خواهید تصویری تولید کنید که تا حد امکان برنامه‌های بیشتری بتوانند آن را بخوانند، باید به زیرمجموعه زیر پایند باشید.

تصویر شامل بایت‌های زیر است:

  • عبارت 'P6' به همراه سطر جدید
  • عرض و ارتفاع که با یک فاصله جدا شده‌اند (مانند '50 100')، به همراه سطر جدید
  • مقدار maxval به همراه سطر جدید. حداکثر ۲۵۵؛ و در شرایط حتی پایه‌ای‌تر، دقیقاً ۲۵۵.
  • داده‌های رستر

تنها یک تصویر در فایل وجود دارد.

برنامه ?Bpnmtopnm?P این زیرمجموعه کمینه را تولید می‌کند، بنابراین اگر یک تصویر پیچیده‌تر PGM دارید، می‌توانید آن را از طریق ?Bpnmtopnm?P به برنامه‌ای با تحمل خطای کمتر منتقل کنید. برنامه ?Bpamdepth?P می‌تواند maxval را به ۲۵۵ تبدیل کند.

در واقع نسخه دیگری از قالب PPM وجود دارد که بسیار نادر است: قالب PPM «ساده» (plain). قالبی که در بالا توضیح داده شد و عموماً قالب عادی در نظر گرفته می‌شود، به عنوان قالب PPM «خام» (raw) شناخته می‌شود. به ?Bpbm?P (1) برای توضیحاتی درباره نحوه ارتباط قالب‌های ساده و خام با یکدیگر و چگونگی استفاده از آن‌ها مراجعه کنید.

تفاوت در قالب ساده به شرح زیر است:

  • دقیقاً یک تصویر در فایل وجود دارد.
  • عدد جادویی به جای P6 برابر P3 است.
  • هر نمونه در رستر به عنوان یک عدد مبنای ۱۰ اسکی (با اندازه اختیاری) نشان داده می‌شود.
  • هر نمونه در رستر دارای نویسه فاصله‌گذار قبل و بعد از خود است. باید حداقل یک نویسه فاصله‌گذار میان هر دو نمونه وجود داشته باشد، اما حداکثری تعیین نشده است. جداسازی خاصی بین یک پیکسل از پیکسل دیگر وجود ندارد -- فقط جداسازی الزامی میان نمونه آبی یک پیکسل از نمونه قرمز پیکسل بعدی وجود دارد.
  • هیچ خطی نباید طولانی‌تر از ۷۰ نویسه باشد.

در اینجا نمونه‌ای از یک تصویر کوچک در این قالب آورده شده است.

P3
# feep.ppm
4 4
15
 0  0  0    0  0  0    0  0  0   15  0 15
 0  0  0    0 15  7    0  0  0    0  0  0
 0  0  0    0  0  0    0 15  7    0  0  0
15  0 15    0  0  0    0  0  0    0  0  0

یک نویسه سطر جدید در پایان هر یک از این سطرها وجود دارد.

برنامه‌هایی که این قالب را می‌خوانند باید تا حد امکان انعطاف‌پذیر باشند و هر آنچه که اندکی شبیه به یک تصویر PPM است را بپذیرند.

هیچ نوع رسانه اینترنتی (معروف به نوع MIME یا content type) برای PPM در IANA ثبت نشده است، اما مقدار ?(CWimage/x-portable-pixmap?P به صورت مرسوم به کار می‌رود.

توجه داشته باشید که نوع رسانه اینترنتی PNM به صورت ?(CWimage/x-portable-anymap?P نیز اعمال می‌شود.

هیچ الزامی برای نام یک فایل PPM وجود ندارد، اما عرف معمول استفاده از پسوند «.ppm» است. پسوند «pnm» نیز برای مواردی که تمایز میان زیرقالب‌های خاص PNM چندان اهمیتی ندارد، مرسوم است.

پیش از آوریل ۲۰۰۰، یک فایل با فرمت خام PPM نمی‌توانست maxval بزرگتر از ۲۵۵ داشته باشد. بنابراین، نمی‌توانست بیش از یک بایت در هر نمونه داشته باشد. برنامه‌های قدیمی ممکن است به این ویژگی وابسته باشند.

پیش از ژوئیه ۲۰۰۰، حداکثر یک تصویر می‌توانست در یک فایل PPM قرار گیرد. در نتیجه، بیشتر ابزارهای پردازش فایل‌های PPM هرگونه داده پس از نخستین تصویر را نادیده می‌گیرند (و نمی‌خوانند).

pnm(1), pgm(1), pbm(1), pam(1), programs that process PPM(1)

این صفحه راهنما توسط ابزار 'makeman' مربوط به Netpbm از منبع HTML تولید شده است. مستندات مرجع در آدرس زیر قرار دارد:

http://netpbm.sourceforge.net/doc/ppm.html
07 November 2025 netpbm documentation