The PBM Format(5) File Formats Manual The PBM Format(5)

pbm - قالب تصویر دوسطحی Netpbm

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

قالب PBM ساده‌ترین مخرج مشترک قالب‌های پرونده تک‌رنگ (سیاه و سفید) است. این قالب به عنوان زبان مشترک خانواده بزرگی از فیلترهای تبدیل تصویر بیت‌مپ عمل می‌کند. از آنجا که این قالب به بهره‌وری و فشرده‌سازی توجهی ندارد، به قدری ساده و عمومی است که به آسانی می‌توان برنامه‌هایی برای تبدیل به و از تقریباً هر قالب گرافیکی دیگر یا جهت ویرایش تصویر توسعه داد.

نام "PBM" کوته‌نوشتی برگرفته از "Portable Bit Map" (بیت‌مپ قابل حمل) است.

این قالبی نیست که معمولاً برای ذخیره یک فایل یا ارسال آن به دیگران استفاده شود -- برای این منظور بیش از حد حجیم بوده و به اندازه کافی رسا نیست. این صرفاً یک قالب واسط است. در خالص‌ترین کاربرد خود، تنها در یک لوله (pipe) ارتباطی میان دو برنامه دیگر جریان می‌یابد.

تعریف قالب به شرح زیر است.

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

هر تصویر PBM از اجزای زیر تشکیل شده است:

  • یک "عدد جادویی" (magic number) برای شناسایی نوع فایل. عدد جادویی یک تصویر pbm دو نویسه "P4" است.
  • فاصله‌های خالی (فاصله‌ها، تب‌ها، بازگشت به سطر، سطر جدید).
  • عرض تصویر به پیکسل، قالب‌بندی‌شده به صورت نویسه‌های ده‌دهی در ASCII.
  • فاصله خالی.
  • ارتفاع تصویر به پیکسل، مجدداً به صورت ده‌دهی در ASCII.
  • یک نویسه فاصله خالی واحد (معمولاً سطر جدید).
  • یک شطرنجی (رستر) از سطرهای ارتفاع، به ترتیب از بالا به پایین. هر سطر به اندازه عرض تصویر بیت دارد که به صورت ۸ بیت در هر بایت فشرده شده‌اند، همراه با بیت‌های بی‌اثر (don't care) برای پر کردن آخرین بایت در سطر. هر بیت نشان‌دهنده یک پیکسل است: ۱ سیاه و ۰ سفید است. ترتیب پیکسل‌ها از چپ به راست است. ترتیب ذخیره‌سازی آن‌ها در هر بایت فایل از باارزش‌ترین بیت به کم‌ارزش‌ترین بیت است. ترتیب بایت‌های فایل از ابتدای فایل به سمت انتهای فایل است.

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

  • پیش از نویسه فاصله خالی جداکننده شطرنجی، هر نویسه‌ای از یک علامت "#" تا (اما نه شامل) نویسه بعدی بازگشت به سطر یا سطر جدید، یا پایان فایل، یک توضیح (کامنت) محسوب شده و نادیده گرفته می‌شود.

    (پیش از ژوئن ۲۰۲۴، مشخص شده بود که نویسه بازگشت به سطر یا سطر جدید بخشی از کامنت باشد و نادیده گرفته شود، اما در طول ۲۲ سالی که کامنت‌ها در مشخصات وجود داشتند، Netpbm هرگز آن را پیاده‌سازی نکرد).

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

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

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

  • عبارت 'P4' به همراه سطر جدید
  • عرض و ارتفاع که با یک فاصله از هم جدا شده‌اند (مانند '50 100')، به همراه سطر جدید
  • داده‌های شطرنجی (raster)

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

برنامه pnmtopnm این زیرمجموعه کمینه را تولید می‌کند، بنابراین اگر یک تصویر PBM پیچیده‌تر دارید، می‌توانید آن را از طریق pnmtopnm به برنامه‌ای با انعطاف کمتر تحویل دهید.

در واقع نسخه دیگری از قالب PBM نیز وجود دارد که حتی ساده‌تر و به مراتب ولخرجانه‌تر از نظر مصرف فضا نسبت به PBM است و Plain PBM نام دارد. در واقع Plain PBM زودتر ابداع شد، اما حتی سازنده آن نیز پس از مدتی نتوانست هدررفت بی‌ملاحظه منابع را تحمل کند و به آنچه اکنون به عنوان قالب استاندارد PBM می‌شناسیم روی آورد. اما Plain PBM آن‌چنان دارای افزونگی است -- آن‌قدر غلوشده است -- که خراب کردن آن عملاً غیرممکن است. شما می‌توانید آن را از طریق بی‌قاعده‌ترین سیستم‌های ایمیل (که هدف اولیه ایجاد قالب PBM بود) منتقل کنید و باز هم خوانا به مقصد برسد. می‌توانید ده‌ها بیت تصادفی را وارونه کنید و باز هم تصویر اصلی را به سادگی بازسازی نمایید. و نیازی به تعریف دقیق قالب در اینجا نیست، چرا که صرفاً با بررسی چشمی می‌توانید آن را رمزگشایی کنید.

برنامه‌های Netpbm به طور پیش‌فرض قالب Raw PBM را به جای Plain PBM تولید می‌کنند، اما با استفاده از گزینه عمومی -plain قالب Plain PBM انتخاب می‌شود.

تفاوت‌ها عبارتند از:

  • دقیقاً یک تصویر در هر فایل وجود دارد.

  • "عدد جادویی" به جای "P4" برابر با "P1" است.

  • هر پیکسل در بخش شطرنجی با یک بایت حاوی نویسه اسکی '1' یا '0' نشان داده می‌شود که به ترتیب نمایانگر سیاه و سفید هستند. هیچ بیت پرکننده‌ای در انتهای سطر وجود ندارد.

  • فاصله خالی در بخش شطرنجی نادیده گرفته می‌شود.

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

  • هیچ سطری نباید طولانی‌تر از ۷۰ نویسه باشد.

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

    P1
    # feep.pbm
    24 7
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
    0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
    0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0
    0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
    0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

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

شما می‌توانید قالب Plain PBM را از قالب استاندارد PBM (فقط تصویر نخست در فایل) با برنامه pnmtoplainpnm تولید کنید.

برنامه‌هایی که این قالب را می‌خوانند باید تا حد امکان آسان‌گیر باشند و هر داده‌ای را که اندکی شبیه به یک بیت‌مپ است بپذیرند.

هیچ نوع رسانه اینترنتی (MIME type، نوع محتوا) برای PBM در IANA ثبت نشده است، اما مقدار image/x-portable-bitmap به صورت سنتی به کار می‌رود.

توجه داشته باشید که نوع رسانه اینترنتی PNM به صورت image/x-portable-anymap نیز برای آن صدق می‌کند.

هیچ الزامی در نام‌گذاری یک فایل PBM وجود ندارد، اما بر اساس عرف از پسوند ".pbm" استفاده می‌شود. همچنین پسوند "pnm" نیز در مواردی که تمایز میان زیرقالب‌های خاص PNM لزومی ندارد، مرسوم است.

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

libnetpbm(1), pnm(1), pgm(1), ppm(1), pam(1), programs that process PBM(1)

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

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