User manual for Netpbm(0) User manual for Netpbm(0)

netpbm - مروری بر کتابخانه و ابزارهای netpbm

Netpbm بسته‌ای از برنامه‌های گرافیکی و یک کتابخانهٔ برنامه‌نویسی است.

بیش از ۳۳۰ برنامهٔ مجزا در این بسته وجود دارد که نام اکثر آن‌ها شامل «pbm»، «pgm»، «ppm»، «pam» یا «pnm» است؛ برای نمونه، pamscale(1) و giftopnm(1).

برای مثال، می‌توانید از pamscale برای کوچک کردن یک تصویر به میزان ۱۰٪ استفاده کنید؛ یا از pamcomp برای قرار دادن یک تصویر روی تصویری دیگر بهره ببرید؛ یا با استفاده از pbmtext تصویری از یک متن بسازید؛ و یا تعداد رنگ‌های یک تصویر را با pnmquant کاهش دهید.

Netpbm یک بستهٔ نرم‌افزاری متن‌باز است که از طریق پروژهٔ netpbm در Sourceforge توزیع می‌شود.

برنامه‌های Netpbm معمولاً برای اجرای مستقیم توسط کاربر از طریق یک پوسته خط فرمان (command shell) مفید هستند، اما همچنین برای استفاده توسط برنامه‌ها نیز طراحی شده‌اند. یک ویژگی مشترک برنامه‌های Netpbm این است که آن‌ها بلوک‌های ساختاری ساده و بنیادینی هستند. بیشترین قدرت آن‌ها زمانی نمایان می‌شود که در خط‌لوله‌ها (pipelines) پشت سر هم قرار گیرند. برنامه‌های Netpbm از رابط‌های کاربری گرافیکی استفاده نمی‌کنند و به دنبال دریافت ورودی از کاربر نیستند. تنها برنامه‌هایی که اصلاً تصویر گرافیکی نمایش می‌دهند، برنامه‌های نمایشی بسیار ابتدایی pamx و ppmsvgalib هستند و به جز این کار هیچ فعالیت دیگری انجام نمی‌دهند.

هر یک از این برنامه‌ها راهنمای مختص به خود را دارند، همان‌طور که در فهرست زیر پیوند داده شده است.

برنامه‌های Netpbm تا جایی که سیستم زیربنایی قادر باشد، می‌توانند فایل‌های بزرگ‌تر از ۲ گیبی‌بایت (2 GiB) را بخوانند و بنویسند. ممکن است استثناهایی وجود داشته باشد که در آن‌ها برنامه‌ها برای دسترسی به فایل‌ها از کتابخانه‌های خارجی (کتابخانه JPEG و غیره) استفاده می‌کنند و کتابخانه خارجی فاقد قابلیت پشتیبانی از فایل‌های بزرگ است. پیش از Netpbm نسخه 10.15 (آوریل ۲۰۰۳)، هیچ برنامه Netpbm قادر به خواندن فایلی به این بزرگی نبود.

چند گزینه وجود دارند که در تمامی برنامه‌های مبتنی بر کتابخانه Netpbm، از جمله تقریباً همه برنامه‌های Netpbm، موجود هستند. این گزینه‌ها در راهنماهای جداگانه هر برنامه ذکر نشده‌اند.

در صورت تمایل می‌توانید به جای یک خط تیره، از دو خط تیره برای این گزینه‌ها استفاده کنید.

تمام پیام‌های اطلاعاتی را که در حالت عادی در خطای استاندارد (Standard Error) منتشر می‌شدند، فرونشانی می‌کند. (به طور دقیق‌تر، این گزینه تنها تا جایی کار می‌کند که برنامه مربوطه، قرارداد Netpbm مبنی بر ارسال تمامی پیام‌های اطلاعاتی از طریق سرویس pm_message() کتابخانه Netpbm را پیاده‌سازی کرده باشد).
به جای انجام هر کار دیگری، نسخه کتابخانه libnetpbm متصل‌شده به برنامه را گزارش می‌دهد (این کتابخانه ممکن است به صورت ایستا در برنامه پیوند خورده باشد یا در زمان اجرا به طور پویا پیوند داده شده باشد). به طور معمول، برنامه‌های Netpbm و کتابخانه آن هم‌زمان نصب می‌شوند، بنابراین این گزینه علاوه بر نسخه برنامه، نسخه تمامی فایل‌های Netpbm دیگر مورد استفاده آن را نیز مشخص می‌کند.
اگر برنامه تصویری در قالب PNM تولید می‌کند، آن را بر خلاف نسخه «خام» (raw یا دودویی)، در نسخه «ساده» (plain یا اسکی/ascii) قالب تولید می‌کند.

توجه داشته باشید که قالب دیگر Netpbm، یعنی PAM، نسخه‌های ساده و خام ندارد، بنابراین این گزینه بر روی برنامه‌ای که خروجی PAM تولید می‌کند هیچ اثری ندارد.

این گزینه در Netpbm نسخه 10.10 (اکتبر ۲۰۰۲) معرفی شد. از Netpbm نسخه 10.32 (فوریه ۲۰۰۶) تا Netpbm نسخه 10.62 (مارس ۲۰۱۳)، این گزینه در برنامه‌ای که خروجی PAM تولید می‌کرد نامعتبر بود (برنامه به جای نادیده گرفتن گزینه، با خطا متوقف می‌شد).

در اینجا فهرست کاملی از تمام برنامه‌های Netpbm (همراه با پیوند به راهنماهای آن‌ها) آورده شده است:

Netpbm program directory(1)

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

اغلب نیاز دارید که تبدیل یا ویرایشی را بر روی دسته‌ای از فایل‌ها اعمال کنید.

به عنوان یک قاعده کلی، برنامه‌های Netpbm یک فایل ورودی می‌گیرند و یک فایل خروجی تولید می‌کنند، که معمولاً به خروجی استاندارد (Standard Output) فرستاده می‌شود. این ویژگی برای انعطاف‌پذیری است، زیرا در اغلب موارد باید ابزارهای متعددی را در خط‌لوله (pipeline) به یکدیگر متصل کنید.

در اینجا مثالی از یک دستور پوسته برای تبدیل تمامی فایل‌های PNG (با نام *.png) به فایل‌های JPEG با نام *.jpg آورده شده است:

for i in *.png; do pngtopam $i | pnmtojpeg >`basename $i .png`.jpg; done

یا می‌توانید با استفاده از awk یا perl جریانی از دستورات جداگانه پوسته، یک دستور به ازای هر فایل، تولید کنید. در اینجا نحوه افزایش روشنایی ۳۰ تصویر YUV که یک ثانیه از یک فیلم را تشکیل می‌دهند و ذخیره نتیجه در همان فایل‌ها نشان داده شده است:

ls *.yuv
   | perl -ne 'chomp;
   print yuvtoppm $_ | pambrighten -value +100 | ppmtoyuv >tmp$$.yuv;
   mv tmp$$.yuv $_ 
   '
   | sh

ابزارهای find (همراه با گزینه -exec) و xargs نیز برای دستکاری‌های ساده روی گروهی از فایل‌ها کاربرد دارند.

قابلیت «جایگزینی فرایند» (process substitution) در برخی پوسته‌ها می‌تواند در مواردی مفید باشد که یک برنامه غیر Netpbm انتظار دارد یک فایل روی دیسک را به عنوان ورودی تعیین کنید، در حالی که شما می‌خواهید از نتیجه پردازش یک ابزار Netpbm استفاده کند. فرض کنید برنامه فرضی printcmyk نام یک فایل Tiff CMYK را به عنوان ورودی دریافت می‌کند و آنچه شما در دست دارید یک فایل PNG به نام abc.png است.

امتحان کنید:

printcmyk <({ pngtopam abc.png | pnmtotiffcmyk ; })

این روش در جهت معکوس نیز کار می‌کند، چنانچه برنامه‌ای داشته باشید که شما را ملزم به تعیین نام فایل خروجی‌اش کند و بخواهید خروجی آن وارد یک ابزار Netpbm شود.

همه این برنامه‌ها با مجموعه‌ای از قالب‌های گرافیکی به نام قالب‌های "netpbm" کار می‌کنند. به‌طور مشخص، این قالب‌ها عبارتند از pbm(1)، pgm(1)، ppm(1)، و pam(1).

سه مورد اول گاهی به‌طور کلی با عنوان "pnm" شناخته می‌شوند.

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

قالب‌های Netpbm همگی قالب‌های شطرنجی (raster) هستند، یعنی تصویر را به عنوان ماتریسی از سطرها و ستون‌های پیکسل‌ها توصیف می‌کنند. در قالب PBM، پیکسل‌ها سیاه و سفید هستند. در قالب PGM، پیکسل‌ها طیف‌های خاکستری هستند. در قالب PPM، پیکسل‌ها تمام‌رنگی هستند. قالب PAM پیشرفته‌تر است. این قالب که جایگزینی برای هر سه قالب دیگر به شمار می‌رود، می‌تواند ماتریس‌هایی از داده‌های کلی شامل، اما نه محدود به، تصاویر سیاه و سفید، طیف خاکستری (grayscale) و رنگی را نمایش دهد.

برنامه‌هایی که برای کار با تصاویر PBM طراحی شده‌اند، "pbm" را در نام خود دارند. برنامه‌هایی که برای کار با تصاویر PGM، PPM و PAM طراحی شده‌اند نیز به همین ترتیب "pgm"، "ppm" و "pam" را در نام خود دارند.

تمام برنامه‌های Netpbm که برای خواندن تصاویر PGM طراحی شده‌اند، تصاویر PBM را نیز طوری می‌بینند که گویی PGM هستند. تمام برنامه‌های Netpbm که برای خواندن تصاویر PPM طراحی شده‌اند، تصاویر PGM و PBM را طوری می‌بینند که گویی PPM هستند. ببینید: تبدیل ضمنی قالب (Implied Format Conversion) .

برنامه‌هایی که "pnm" را در نام خود دارند، قالب‌های PBM، PGM و PPM را می‌خوانند اما بر خلاف برنامه‌های "ppm"، میان این قالب‌ها تمایز قائل می‌شوند و عملکرد آن‌ها به قالب بستگی دارد. برای مثال، pnmtopng(1) در صورتی که ورودی آن PBM یا PGM باشد یک تصویر خروجی PNG سیاه و سفید ایجاد می‌کند، اما اگر ورودی آن PPM باشد یک تصویر خروجی PNG رنگی می‌سازد. و pnmrotate تصویری در خروجی با همان قالب ورودی تولید می‌کند. یک برنامه فرضی ppmrotate نیز هر سه قالب ورودی PNM را می‌خواند، اما همه آن‌ها را به صورت PPM در نظر می‌گیرد و همیشه خروجی PPM تولید خواهد کرد.

برنامه‌هایی که "pam" را در نام خود دارند تمام قالب‌های Netpbm را می‌خوانند: PBM، PGM، PPM و PAM. آن‌ها گاهی اوقات با استفاده از یک تبدیل ضمنی، با همه آن‌ها طوری رفتار می‌کنند که گویی PAM هستند، اما اغلب قالب‌های جداگانه را تشخیص داده و مانند یک برنامه "pnm" بر همان اساس عمل می‌کنند. ببینید: تبدیل ضمنی قالب (Implied Format Conversion) .

در نهایت، زیرقالب‌هایی از PAM وجود دارند که به ترتیب معادل PBM، PGM و PPM هستند، و برنامه‌های Netpbm که برای خواندن PBM، PGM و/یا PPM طراحی شده‌اند، آن تصاویر PAM را طوری می‌بینند که گویی قالب‌های قبلی هستند. برای مثال، ppmhist می‌تواند یک تصویر PAM با tuple type از نوع RGB (یعنی یک تصویر رنگی) را طوری تحلیل کند که گویی PPM است.

اگر وجود سه قالب جداگانه PNM به نظرتان بیهوده می‌رسد، بدانید که این موضوع یک دلیل تاریخی دارد. در ابتدا، تنها PBMها وجود داشتند. بعداً PGMها آمدند و سپس PPMها. بسیار پس از آن PAM آمد که امکان داشتن تنها یک قالب تجمیعی و یکپارچه را محقق ساخت.

این قالب‌ها در مشخصاتِ pbm(1)، pgm(1)، ppm(1)، و pam(1) توضیح داده شده‌اند.

برنامه‌ای که از زیرروال‌های کتابخانه PGM برای خواندن یک تصویر استفاده می‌کند، می‌تواند علاوه بر تصویر PGM، یک تصویر PBM را نیز بخواند. این برنامه تصویر PBM را طوری می‌بیند که گویی تصویر معادل PGM با maxval برابر با ۲۵۵ است. نکته: این موضوع گاهی افرادی را که با دیدی در لایه‌ای پایین‌تر از حد معمول به قالب‌ها نگاه می‌کنند دچار سردرگمی می‌کند، زیرا مقدار صفر در رستر PBM به معنای سفید است، در حالی که مقدار صفر در رستر PGM به معنای سیاه است.

برنامه‌ای که از زیرروال‌های کتابخانه PPM برای خواندن یک تصویر استفاده می‌کند، می‌تواند علاوه بر تصویر PPM یک تصویر PGM را، و علاوه بر تصویر PGM یک تصویر PBM را بخواند. برنامه، تصویر PBM یا PGM را طوری می‌بیند که گویی تصویر معادل PPM است؛ با maxval برابر با ۲۵۵ در مورد PBM و همان مقدار maxval تصویر PGM در مورد PGM.

برنامه‌ای که از زیرروال‌های کتابخانه PAM برای خواندن یک تصویر استفاده می‌کند، می‌تواند تصویر PBM، PGM یا PPM را مانند یک تصویر PAM بخواند. این برنامه تصویر PBM را طوری می‌بیند که گویی تصویر معادل PAM با tuple type از نوع BLACKANDWHITE است. تصویر PGM را طوری می‌بیند که گویی تصویر معادل PAM با tuple type از نوع GRAYSCALE است. تصویر PPM را طوری می‌بیند که گویی تصویر معادل PAM با tuple type از نوع RGB است. اما این برنامه در واقع می‌تواند در صورت نیاز ساختار عمیق‌تر را نیز بررسی کند. این برنامه می‌تواند دقیقاً تشخیص دهد که ورودی کدام قالب بوده است و ممکن است بر همان اساس پاسخ دهد. برای مثال، یک برنامه PAM معمولاً خروجی را در همان قالب ورودی خود تولید می‌کند.

برنامه‌ای که از زیرروال‌های کتابخانه PGM برای خواندن تصویر استفاده می‌کند، در صورتی که PAM یک تصویر بصری با طیف خاکستری یا سیاه و سفید باشد، می‌تواند یک تصویر PAM را نیز مانند تصویر PGM بخواند. این موضوع از نظر اصولی بدان معناست که PAM دارای depth برابر با ۱ و tuple type با مقدار GRAYSCALE یا BLACKANDWHITE است، اما اکثر برنامه‌های Netpbm تا حد زیادی منعطف هستند و هرگونه PAM را پذیرفته و همه به جز اولین plane را نادیده می‌گیرند.

تبدیل ضمنی مشابهی نیز برای زیرروال‌های کتابخانه PPM هنگام خواندن PAM وجود دارد. هیچ مورد مشابهی برای PBM وجود ندارد، بنابراین اگر نیاز دارید یک برنامه PBM یک تصویر PAM را بخواند، آن را از طریق pamtopnm پردازش کنید.

در بسیاری از قالب‌های گرافیکی، روشی برای مشخص کردن این وجود دارد که بخش‌های خاصی از تصویر کاملاً یا تا حدی شفاف (transparent) هستند؛ به این معنا که اگر روی تصویر دیگری نمایش داده شوند، تصویر دیگر از میان آن بخش‌ها دیده خواهد شد. قالب‌های Netpbm عمداً این قابلیت را حذف کرده‌اند، چرا که هدف آن‌ها بسیار ساده بودن است.

در Netpbm، شفافیت را از طریق یک ماسک شفافیت در یک تصویر PGM جداگانه (با بازتعریفی جزئی) مدیریت می‌کنید. در این شبه-PGM، آنچه معمولاً شدت روشنایی یک پیکسل است، در عوض مقدار کدر بودن (opaqueness) است. ببینید: pgm(1). برنامه pamcomp(1) نمونه‌ای از برنامه‌هایی است که از ماسک شفافیت PGM استفاده می‌کند.

روش دیگری برای نمایش اطلاعات شفافیت اخیراً در Netpbm با استفاده از تصاویر PAM توسعه یافته است. علی‌رغم استدلال ذکرشده در بالا مبنی بر این‌که قالب‌های Netpbm باید آن‌قدر ساده باشند که اطلاعات شفافیت در آن‌ها تعبیه نشود، مشخص شد که حمل جداگانه اطلاعات شفافیت بسیار نامناسب و ناخوشایند است. این امر در درجه اول به این دلیل است که شل‌های Unix روش‌های ساده‌ای برای داشتن شبکه‌ای از پایپ‌لاین‌ها ارائه نمی‌دهند. شما در یک پایپ‌لاین از هر برنامه یک ورودی و یک خروجی می‌گیرید؛ بنابراین مایلید هم اطلاعات رنگ و هم اطلاعات شفافیت یک تصویر را به‌طور هم‌زمان در یک پایپ (pipe) یکسان داشته باشید.

به همین دلیل، برخی از برنامه‌های جدید (و اخیراً بازسازی‌شده‌ی) Netpbm، تصاویر PAM با نوع چندتایی (tuple type) از نوع RGB_ALPHA یا GRAYSCALE_ALPHA را شناسایی و تولید می‌کنند که شامل یک صفحه (plane) برای اطلاعات شفافیت است. ببینید: the PAM specification(1).

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

اما این کتابخانه همچنین شامل برخی توابع کمکی مانند رسم نویسه‌ها و تبدیل RGB/YCrCb است.

این کتابخانه از پیوند (linkage) متعارف C بهره می‌برد. تقریباً تمام برنامه‌های موجود در بسته Netpbm بر اساس کتابخانه Netpbm ساخته شده‌اند.

در یک نصب استاندارد از Netpbm، برنامه‌ای به نام netpbm-config در مسیر پیش‌فرض جستجوی برنامه‌ها وجود دارد. ما این را یک برنامه Netpbm در نظر نمی‌گیریم -- بلکه تنها بخشی کمکی از نصب Netpbm است. این برنامه اطلاعاتی درباره نحوه نصب Netpbm به شما ارائه می‌دهد و هدف آن اجرا شدن توسط برنامه‌های دیگری است که با Netpbm در تعامل هستند. در واقع، netpbm-config در اصل یک فایل پیکربندی است، مشابه آنچه معمولاً در دایرکتوری /etc/ یک سیستم Unix مشاهده می‌کنید.

مثال:

$netpbm-config --datadir
/usr/local/netpbm/data

اگر برنامه‌ای بنویسید که نیاز به دسترسی به یک فایل داده Netpbm داشته باشد، می‌تواند از چنین دستور شلی برای یافتن محل فایل‌های داده Netpbm استفاده کند.

netpbm-config تنها فایلی است که باید در یک دایرکتوری استاندارد نصب شود (باید در دایرکتوری‌ای باشد که در مسیر پیش‌فرض جستجوی برنامه‌ها قرار دارد). می‌توانید از netpbm-config به‌عنوان یک ابزار راه‌انداز اولیه (bootstrap) برای یافتن تمام فایل‌های دیگر Netpbm استفاده کنید.

مستندات دقیقی برای netpbm-config وجود ندارد. اگر در موقعیتی هستید که نیاز به استفاده از آن دارید، با خواندن خود فایل نباید مشکلی در درک نحوه استفاده از آن داشته باشید.

یکی از ویژگی‌های مهمی که در میان نرم‌افزارهای گرافیکی تفاوت دارد، میزان و نحوه مصرف حافظه توسط آن‌ها است. آیا نرم‌افزار کل یک تصویر را در حافظه می‌خواند، روی آن کار می‌کند و سپس همه را یک‌باره می‌نویسد؟ یا در هر لحظه یک پیکسل را می‌خواند و می‌نویسد؟ در Netpbm، این رفتار از برنامه‌ای به برنامه دیگر متفاوت است، اما می‌توان برخی کلیات را مطرح کرد.

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

هنگامی که Netpbm پیکسلی را در حافظه نگه می‌دارد، معمولاً فضای بسیار بیشتری نسبت به آنچه در قالب فایل تصویری Netpbm اشغال می‌کند، به آن اختصاص می‌دهد.

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

برنامه‌های جدیدتر در ساختار داخلی خود از خانواده توابع کتابخانه‌ای "pam" استفاده می‌کنند که حافظه را کمی متفاوت به کار می‌برند. این توابع برای کار با چندتایی‌های (tuples) عمومی با تعداد متغیری از صفحات (planes) طراحی شده‌اند، بنابراین ذخیره‌سازی با اندازه ثابت به ازای هر چندتایی امکان‌پذیر نیست. برنامه‌ای از این نوع، به ازای هر نمونه (sample) 4 بایت (یک چندتایی از نمونه‌ها تشکیل شده است) به‌علاوه یک اشاره‌گر (4 تا 8 بایت) به ازای هر چندتایی مصرف می‌کند. در یک تصویر گرافیکی، یک چندتایی همان پیکسل است؛ بنابراین یک تصویر رنگی معمولی 16 تا 20 بایت به ازای هر پیکسل فضا می‌گیرد.

هنگام بررسی مصرف حافظه، یادآوری این نکته مهم است که حافظه و فضای ذخیره‌سازی دیسک از دو جهت معادل یکدیگرند:

  • حافظه اغلب مجازی است و با فضای swap روی ذخیره‌ساز دیسک پشتیبانی می‌شود؛ بنابراین دسترسی به حافظه ممکن است به معنای انجام I/O دیسک باشد.
  • فایل‌ها معمولاً حافظه‌پنهان‌گذاری (cached) و بافر می‌شوند؛ بنابراین دسترسی به یک فایل دیسک ممکن است صرفاً به معنای دسترسی به حافظه باشد.

این بدان معناست که پیامدهای اینکه یک برنامه از فایل تصویر کار کند یا از یک کپی در حافظه، سرراست و ساده نیست.

توجه داشته باشید که یک تصویر در فایل قالب Netpbm و در نتیجه در کش فایل سیستم‌عامل، فضای بسیار کمتری نسبت به قالب درون‌حافظه‌ای Netpbm اشغال می‌کند. در قالب‌های تصویری غیر Netpbm، حجم داده‌ها حتی کمتر هم هست؛ بنابراین خواندن چندباره فایل ورودی به جای نگه‌داشتن یک نسخه در حافظه عادی، می‌تواند بهترین شیوه مصرف حافظه باشد و بسیاری از برنامه‌های Netpbm همین کار را انجام می‌دهند. اما برخی فایل‌ها را نمی‌توان چند بار خواند؛ به‌ویژه نمی‌توانید یک پایپ (pipe) را به عقب برگردانید و دوباره بخوانید، در حالی که پایپ اغلب ورودی یک برنامه Netpbm است. برنامه‌های Netpbm که فایل‌ها را چند بار می‌خوانند، چنین فایل‌های ورودی را تشخیص داده و آن‌ها را درون یک فایل موقت می‌خوانند، سپس آن فایل موقت را چندین بار بازخوانی می‌کنند.

تعداد کمی از برنامه‌های Netpbm از قالب درون‌حافظه‌ای با تنها یک بیت به ازای هر پیکسل استفاده می‌کنند. این‌ها برنامه‌هایی هستند که تبدیل بین PBM و قالبی با ساختار رستر (raster) بسیار شبیه به PBM را انجام می‌دهند. در این حالت، استفاده از نمایش عمومی 12 بایتی یا 8 بایتی Netpbm برای پیکسل‌ها، در واقع باعث پیچیده‌تر شدن برنامه (علاوه بر بسیار کندتر شدن آن) می‌شد.

ضمناً، این اصل قدیمی که حافظه به‌مراتب سریع‌تر از دیسک است لزوماً درست نیست. در سیستم‌های کوچک معمولاً درست است، اما در سیستمی با شبکه بزرگی از دیسک‌ها، به‌ویژه با striping، ذخیره‌ساز دیسک به‌سادگی می‌تواند داده‌ها را سریع‌تر از مقداری که CPU قادر به استفاده از آن است تأمین کند.

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

توجه داشته باشید که هنگام دانلود باینری کامپایل‌شده توسط شخص دیگر، حتی اگر به نظر برسد که به درستی برای ماشین شما کامپایل شده است، در صورت قدیمی بودن ماشین ممکن است برای آن نامناسب کامپایل شده باشد؛ چرا که ممکن است شخص کامپایل‌کننده تصمیم گرفته باشد از قابلیت‌های پردازنده‌های جدیدتر آن نسل بهره ببرد. به عنوان مثال، یک برنامه x86 ممکن است طوری کامپایل شده باشد که از دستورالعمل‌های موجود در 80486 استفاده کند، اما در 80386 وجود نداشته باشد. شما احتمالاً تا زمانی که برنامه را اجرا نکنید و با خطا متوقف (crash) نشود، متوجه این موضوع نخواهید شد.

اما گزینه‌های پیش‌فرض ساخت تقریباً همیشه باینری‌هایی تولید می‌کنند که تا جای ممکن با پردازنده‌های قدیمی‌تر سازگاری رو به عقب داشته باشند. یک استثنا، ساخت برای یک پردازنده 64 بیتی x86 است. در حالی که سازنده می‌تواند برنامه‌ای بسازد که روی یک x86 سی و دو بیتی اجرا شود، به طور پیش‌فرض این کار را انجام نمی‌دهد. ساخت پیش‌فرض برنامه‌ای تولید می‌کند که روی یک پردازنده قدیمی‌تر x86 که صرفاً ۳۲ بیتی است اجرا نخواهد شد.

یک گزینه ساخت رایج، استفاده از عملوندهای MMX/SSE در پردازنده‌های x86 است. این عملوندها در پردازنده‌های قدیمی‌تر x86 موجود نیستند. سازنده به طور پیش‌فرض هنگام ساخت برای پردازنده‌های ۳۲ بیتی x86 کدی تولید نمی‌کند که از MMX/SSE استفاده کند، اما هنگام ساخت برای x86 شصت و چهار بیتی این کار را انجام می‌دهد.

یکی از بخش‌های با اهمیت ویژه، محاسبات ممیز شناور (floating point) است. قالب‌های تصویر Netpbm بر پایه اعداد صحیح هستند و محاسبات Netpbm تا حد امکان با اعداد صحیح انجام می‌شود. اما یک بخش مهم وجود دارد که از ممیز شناور استفاده می‌کند: برنامه‌هایی که باید با شدت نور (light intensity) کار کنند. قالب‌های Netpbm از اعداد صحیحی استفاده می‌کنند که با روشنایی متناسب هستند و روشنایی رابطه‌ای نمایی با شدت نور دارد. برنامه‌ها باید مقادیر میانی شدت نور را به صورت ممیز شناور نگه دارند تا دقت کاهش نیابد. همچنین تبدیل (تابع گاما) بین این دو، محاسبات ممیز شناور سنگینی است.

برنامه‌هایی که پیکسل‌ها را با یکدیگر ترکیب می‌کنند باید شدت نور را تلفیق نمایند، بنابراین محاسبات ممیز شناور سنگینی انجام می‌دهند. سه مورد از محبوب‌ترین برنامه‌های Netpbm این کار را انجام می‌دهند: pamscale(1) (کوچک/بزرگ کردن یک تصویر)، pamcomp(1) (انداختن یک تصویر روی تصویری دیگر) و pamditherbw(1) (ایجاد یک تصویر سیاه و سفید که تقریبی از یک تصویر در مقیاس خاکستری است).

قالب‌های تصویر Netpbm از اعداد صحیح ۱۶ بیتی استفاده می‌کنند. کد Netpbm برای کار با آن‌ها از اعداد صحیح با اندازه "unsigned int" استفاده می‌کند.

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

یک راه بسیار آسان برای نوشتن افزونه Gimp، نوشتن یک برنامه Netpbm است (به یاد داشته باشید که رسالت بنیادی Netpbm آسان کردن نوشتن برنامه‌های دستکاری تصویر است) و سپس استفاده از netpbm2gimp برای کامپایل همان کد منبع به یک افزونه Gimp است.

شما می‌توانید برنامه‌ای را که از یک قالب فایل گرافیکی خاص به قالب Netpbm تبدیل می‌کند، به یک افزونه load در Gimp تبدیل کنید. به همین ترتیب، می‌توانید برنامه‌ای را که از قالب Netpbm به یک قالب گرافیکی خاص تبدیل می‌کند، به یک افزونه store در Gimp تبدیل کنید. در نهایت، برنامه‌ای که تصاویر را در قالب Netpbm دگرگون می‌سازد می‌تواند به یک افزونه process تبدیل شود.

همچنین پروژه netpbm2gimp از پیش چندصد برنامه Netpbm را به عنوان افزونه‌های Gimp برای شما بسته‌بندی کرده است. با این بسته می‌توانید به عنوان مثال، تصویری را در هر یک از قالب‌های فایل گرافیکی مبهم و نایابی که Netpbm می‌فهمد ولی هیچ ویرایشگر تصویر دیگری توانایی خواندن آن‌ها را ندارد، ویرایش کنید.

اگر از Netpbm برای کارهای گرافیکی یک وب‌سایت استفاده می‌کنید، می‌توانید برنامه‌های Netpbm را از طریق یک اسکریپت PHP فراخوانی کنید. برای ساده‌تر شدن این کار، نگاهی به PHP-NetPBM بیندازید؛ یک کلاس PHP که با Netpbm در تعامل است. هدف اصلی آن کاهش دشواری‌های استفاده از Netpbm هنگام کار با تصاویر در قالب‌های مختلف است. این ابزار شامل دستورات ماکرو برای اعمال دستکاری‌ها روی فایل‌های متعدد است.

من در واقع نمی‌توانم PHP-NetPBM را توصیه کنم. مدتی را صرف بررسی آن کردم و نتوانستم سر از آن درآورم. بخشی از مستندات آن به انگلیسی دست‌وپا شکسته است و بخش دیگر با یک مجموعه نویسه غیرمعمول نوشته شده است. اما یک متخصص PHP شاید بتواند آن را درک کرده و از آن استفاده کند.

مجموعه Netpbm شامل بلوک‌های سازنده اولیه است. این مجموعه قطعاً یک کتابخانه نرم‌افزاری گرافیکی کامل نیست.

نرم‌افزار ImageMagick بسیاری از کارهای مشابه Netpbm - عمدتاً کارهای پرکاربردتر - از جمله تبدیل میان قالب‌های محبوب و ویرایش پایه‌ای را انجام می‌دهد. convert، mogrify، montage و animate برنامه‌های محبوب بسته ImageMagick هستند. ImageMagick روی Unix، Windows، Windows NT، Macintosh و VMS اجرا می‌شود.

همچنین ImageMagick شامل برنامه display است که یک نمایش‌دهنده و ویرایشگر دیداری است.

نخستین چیزی که برای استفاده از هر یک از این ابزارها به آن نیاز خواهید داشت، یک نمایش‌دهنده است. (در GNU/Linux، در مواقع ضروری می‌توانید از pamx یا ppmsvgalib در Netpbm استفاده کنید، اما بسیار محدودکننده است). ابزار zgv یک نمایش‌دهنده همه‌فن‌حریف و مناسب برای استفاده در یک سیستم GNU/Linux به‌همراه کتابخانه درایور نمایش گرافیکی SVGALIB است. می‌توانید zgv را در نشانی زیر بیابید: ftp://ftp.ibiblio.org/pub/Linux/apps/graphics/viewers/svga .

ابزار zgv حتی قابلیتی دارد که در آن می‌توانید تصویر را به‌صورت بصری برش دهید و با استفاده از pamcut(1)، یک فایل خروجی از تصویر برش‌خورده بنویسید.

گزینه -s در zgv را ببینید.

برای علاقه‌مندان به سامانه X، برنامه xzgv نیز وجود دارد.

برنامه xwud (مخفف X Window Undump) یک برنامه کاربردی کلاسیک در سامانه پنجره X (X Window System) است که تصویری را در یک پنجره X نمایش می‌دهد. این برنامه قالب ویژه X Window Dump را به‌عنوان ورودی دریافت می‌کند؛ می‌توانید از pnmtoxwd(1) در Netpbm برای ساخت آن استفاده کنید. احتمالاً بهتر است صرفاً از pamx(1) در Netpbm استفاده کنید.

برنامه‌های xloadimage و افزونه آن xli نیز راه‌های رایجی برای نمایش یک تصویر گرافیکی در X هستند.

برنامه gqview یک نمایش‌دهنده تصویر مدرن‌تر مبتنی بر X است.

برنامه qiv یک نمایش‌دهنده کوچک و بسیار سریع برای X است.

برای پخش فیلم‌های mpeg، مانند موارد تولیدشده توسط ppmtompeg، برنامه mplayer(1) یا xine را امتحان کنید.

ببینید: ftp://metalab.unc.edu/pub/Linux/apps/graphics/viewers/X .

برنامه xwd (مخفف X Window Dump)، یک برنامه کاربردی کلاسیک در X Window System است که محتویات یک پنجره X را در قالب تصویر ویژه خود به نام X Window Dump File ذخیره (کپچر) می‌کند. می‌توانید از xwdtopnm(1) در Netpbm برای تبدیل آن به قالبی کاربردی‌تر استفاده کنید.

fbdump محتویات فعلی یک صفحه نمایش ویدئویی را در رایانه محلی ضبط کرده و تصویری با قالب PPM از آن تولید می‌کند. این ابزار با دستگاه‌های framebuffer لینوکس کار می‌کند.

نرم‌افزار گرافیکی بصری، نرم‌افزاری مدرن و مبتنی بر اشاره و کلیک (point-and-click) است که تصویری را نمایش داده و به شما امکان می‌دهد روی آن کار کرده و نتایج را هم‌زمان مشاهده کنید. این ماهیت اساساً با آنچه برنامه‌های Netpbm انجام می‌دهند متفاوت است.

برنامه xv یک ویرایشگر تصویر ساده بسیار قدیمی و بسیار محبوب در دنیای Unix است؛ هرچند امروزه پشتیبانی یا نگهداری چندانی از آن صورت نمی‌گیرد.

برنامه Gimp یک ویرایشگر تصویر بصری برای Unix و X Window System است، در همان دسته‌ای که برنامه‌های معروف‌تر، کم‌قابلیت‌تر و بسیار گران‌تر مانند Adobe Photoshop و غیره برای Windows قرار دارند. ببینید: http://www.gimp.org . و می‌توانید بیشتر عملکردهای Netpbm را با استفاده از Netpbm2gimp به Gimp اضافه کنید.

مجموعه ImageMagick شامل برنامه display است که ویرایشگر تصویر بصری دیگری به‌شمار می‌رود. این برنامه عملکردهای کمتری نسبت به Gimp دارد و از X Window System استفاده می‌کند. این بسته همچنین شامل برنامه‌های گرافیکی خط فرمان نیز هست.

برنامه‌های Electric Eyes، kuickshow و gthumb نیز ویرایشگرهای بصری برای سامانه پنجره X هستند و KView و gwenview به‌طور ویژه برای KDE ساخته شده‌اند.

اگر برنامه‌ای به زبان C برای ترسیم و دستکاری تصاویر می‌نویسید، gd را بررسی کنید. Netpbm شامل یک کتابخانه C برای ترسیم تصاویر (روال‌های "ppmd" در libnetpbm) است، اما به‌اندازه gd قدرتمند نبوده و مستندسازی نشده است. کتابخانه‌های واسط متعددی برای Perl، PHP و سایر زبان‌ها موجود هستند.

شما می‌توانید به‌راحتی هر برنامه Netpbm را از طریق تابع pm_system از کتابخانه برنامه‌نویسی Netpbm درون یک برنامه C اجرا کنید، اما این کار نسبت به استفاده از توابع gd که همان کار را انجام می‌دهند کارایی کمتری دارد.

Cairo نیز مشابه است.

کتابخانه Ilib یک کتابخانه از زیرروال‌های C همراه با توابعی برای افزودن متن به یک تصویر است (مشابه کاری که ممکن است در سطحی بالاتر با pbmtext، pamcomp و غیره انجام دهید). این کتابخانه با ورودی و خروجی Netpbm کار می‌کند. می‌توانید آن را در k5n.us بیابید. بسته Netpbm همچنین شامل توابع رسم نویسه در کتابخانه libnetpbm(1) است، اما آن‌ها قابلیت‌های پیشرفته فونت را ندارند (برای نمونه‌ای از کاربرد توابع رسم نویسه در Netpbm، به ppmdraw(1) مراجعه کنید).

Pango کتابخانه دیگری برای رندر متن است که بر بین‌المللی‌سازی تمرکز دارد.

پروژه‌های Pango و Cairo مکمل یکدیگر هستند و به‌خوبی با هم کار می‌کنند.

کتابخانه GD مجموعه‌ای از روال‌های گرافیکی است که بخشی از PHP به شمار می‌رود. این کتابخانه زیرمجموعه‌ای از عملکردهای Netpbm را دارد و مشخص شده است که تغییر اندازه تصاویر را کندتر و با کیفیت کمتری انجام می‌دهد.

mencode، که بخشی از بستهٔ mplayer(1) است، فایل‌های ویدیویی می‌سازد. این ابزار مانند نسخه‌ای بسیار پیشرفته‌تر از ppmtompeg(1) است، بدون سادگی اجزای سازندهٔ Netpbm.

MJPEGTools نرم‌افزاری برای کار با قالب ویدیویی MJPEG است.

برای ساخت GIF متحرک، یا استخراج یک فریم از آن، از gifsicle استفاده کنید. gifsicle تبدیل میان GIF متحرک و GIF ایستا را انجام می‌دهد، و می‌توانید از pamtogif و giftopnm برای اتصال به تمام ابزارهای Netpbm بهره ببرید. ببینید: http://www.lcdf.org/gifsicle .

برای تبدیل تصویر یک متن به متن (تشخیص نوری نویسه‌ها - OCR)، از gocr استفاده کنید (آن را معکوس pbmtext در نظر بگیرید). ببینید: http://jocr.sourceforge.net .

http://schaik.com/pngsuite شامل یک مجموعهٔ آزمون PNG است -- تعداد زیادی از تصاویر PNG که قابلیت‌های مختلف قالب PNG را به کار می‌گیرند.

نسخه‌های دیگری از pnmtopng/pngtopam متعلق به Netpbm در این نشانی قرار دارند: http://www.schaik.com/png/pnmtopng.html" (1).

نسخهٔ موجود در Netpbm در واقع مدت‌ها پیش بر اساس آن بسته ساخته شده بود، و می‌توان انتظار داشت که در آن بسته، استفادهٔ بهتری از قالب PNG، به‌ویژه بهبودهای اخیر را بیابید. هرچند ممکن است کمی کمتر با پروژهٔ Netpbm سازگار بوده و کمتر از بهبودهای اخیر قالب Netpbm بهره ببرد.

pngwriter یک کتابخانهٔ C++ برای ساخت تصاویر PNG است. با آن، می‌توانید یک تصویر را پیکسل به پیکسل رسم کنید. همچنین می‌توانید با کتابخانهٔ FreeType2 متن را رندر کنید.

jpegtran برخی از همان تبدیلات معروف Netpbm را انجام می‌دهد، اما آن‌ها را به‌طور خاص روی فایل‌های JPEG و بدون افت اطلاعات اعمال می‌کند. در مقابل، اگر بخواهید از Netpbm استفاده کنید، ابتدا باید تصویر JPEG را به قالب Netpbm فشرده‌زدایی کرده، سپس تصویر را تبدیل نموده، و در نهایت آن را دوباره به قالب JPEG فشرده کنید. در آن فشرده‌سازی مجدد، مقداری از اطلاعات تصویر را از دست می‌دهید چرا که JPEG یک فشرده‌سازی با اتلاف است. البته فقط چند نوع تبدیل بدون اتلاف امکان‌پذیر است. jpegtran به همراه کتابخانهٔ JPEG متعلق به Independent JPEG Group ( http://www.ijg.org) عرضه می‌شود.

برخی ابزارها برای کار با فایل‌های EXIF (همچنین ابزارهای jpegtopnm(1) و pnmtojpeg(1) در Netpbm را ببینید):

برای استخراج (تفسیر) یک هدر EXIF: ابزار Exifdump (( http://www.math.u-psud.fr/~bousch/exifdump.py) ) یا Jhead .

یک کتابخانه و استخراج‌کنندهٔ EXIF برای Python: http://pyexif.sourceforge.net.

اینجا نرم‌افزاری برای کار با IOCA (Image Object Content Architecture) معرفی شده است: ImageToolbox (۲۵۰۰ دلار، نسخهٔ آزمایشی موجود است). این ابزار می‌تواند تبدیل از TIFF -> IOCA و برعکس را انجام دهد.

Ameri-Imager یک ویرایشگر تصویر و ویدیو است (۴۰ دلار، فقط Windows).

pnm2ppa به قالب “Winprinter” شرکت HP تبدیل می‌کند (برای HP 710، 720، 820، 1000 و غیره). این ابزار یک ابرمجموعه از pbmtoppa در Netpbm است و به‌طور قابل‌توجهی رنگ را پشتیبانی می‌کند. با این حال، بیشتر شبیه یک درایور چاپگر است تا یک جزء ساختاری گرافیکی پایه به سبک Netpbm. ببینید: پروژهٔ Pnm2ppa در Sourceforge

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

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

نخست، بررسی می‌کنیم که Netpbm کجا به پردازش اسناد پیوند می‌خورد. pstopnm اسناد Postscript و PDF را به PNM تبدیل می‌کند. این برنامه در عمل سند را به تصاویری از صفحات چاپ‌شده رندر می‌کند. pstopnm چیزی جز یک پوسته (wrapper) کارآمد برای Ghostscript ، و به‌ویژه درایورهای دستگاه با فرمت Netpbm که بخشی از آن هستند، نیست. pnmtops و pbmtoepsi یک تصویر PNM را به یک برنامه Postscript برای چاپ تصویر تبدیل می‌کنند. اما برای استفاده واقعی از فایل‌های PDF و Postscript، عموماً به نرم‌افزارهای پیچیده‌تر پردازش اسناد نیاز خواهید داشت.

شرکت Adobe قالب‌های Postscript و PDF را ابداع کرد و محصولات Adobe از جهات گوناگون ابزارهای بنیادین Postscript و PDF محسوب می‌شوند.

برنامه رایگان Acrobat Reader متعلق به Adobe فایل‌های PDF را نمایش داده و به Postscript تبدیل می‌کند. نام برنامه Acrobat Reader برای unix برابر با «acroread» است و گزینه -toPostScript (همچنین گزینه -level2 را نیز ببینید) بسیار کاربردی است.

سایر نرم‌افزارهای تجاری Adobe فایل‌های Postscript و PDF را تفسیر کرده و می‌سازند. «Distill» برنامه‌ای است که Postscript را به PDF تبدیل می‌کند.

xpdf نیز فایل‌های PDF را می‌خواند.

برنامه‌های GSview، ghostview، gv، ggv و kghostview برخی دیگر از نمایش‌دهنده‌های فایل‌های Postscript و PDF هستند.

برنامه ps2pdf، بخشی از Ghostscript، فایل‌های Postscript را به PDF تبدیل می‌کند.

bmpp(1) فرمت‌های Netpbm و دیگر قالب‌ها را به PDF تبدیل می‌کند.

دو بسته‌ای که انواع بیشتری از Encapsulated Postscript را نسبت به برنامه‌های Netpbm تولید می‌کنند (از جمله انواع فشرده‌شده)، عبارتند از bmpp(1) و imgtops .

dvips فایل‌ها را از فرمت DVI به Postscript تبدیل می‌کند. DVI فرمتی است که Tex تولید می‌کند. Netpbm می‌تواند فرمت Postscript را به PNM تبدیل کند. بنابراین، می‌توانید از ترکیب آن‌ها برای کار گرافیکی با اسناد Tex/Latex بهره ببرید.

wvware یک سند Microsoft Word (فایل با پسوند .doc) را به انواع فرمت‌های دیگر تبدیل می‌کند. اگرچه به نظر نمی‌رسد در صفحه وب آن اشاره‌ای شده باشد، اما طبق گزارش‌ها می‌تواند تصاویر تعبیه‌شده در سند Word را به صورت فایل PNG استخراج کند.

Document Printer انواع قالب‌های اسناد چاپی (مانند Microsoft Word، PDF، HTML و غیره) را به قالب‌های تصویر گرافیکی گوناگون تبدیل می‌کند (۳۸ دلار، فقط Windows).

برنامه Latex2html کد مبدأ سند Latex را به کد مبدأ سند HTML تبدیل می‌کند. بخشی از این فرایند شامل گرافیک است و Latex2html برای برخی از آن‌ها از ابزارهای Netpbm بهره می‌گیرد. اما Latex2html در طول تاریخچه خود هم‌وابستگی‌های نسبتاً نامتعارفی با Netpbm داشته است. نسخه‌های قدیمی‌تر Latex2html با نگارش کنونی Netpbm کار نمی‌کنند، با این حال نسخه Latex2html-99.2beta8 کار می‌کند.

برنامه file به محتوای یک فایل نگاه کرده و نوع آن فایل را اعلام می‌کند. این برنامه بیشتر قالب‌های گرافیکی را که Netpbm با آن‌ها کار می‌کند تشخیص می‌دهد، بنابراین برای کارهای گرافیکی بسیار کارآمد است. برنامه anytopnm(1) متعلق به Netpbm به file وابسته است. ببینید: ftp://ftp.astron.com/pub/file .

مجموعه ابزار Utah Raster Toolkit از گروه «Geometric Design And Computation» در دانشکده علوم رایانه دانشگاه University of Utah تا حد زیادی همان هدف Netpbm را برآورده می‌کند، اما بدون تأکید بر تبدیل فرمت‌ها. این بسته بر پایه قالب RLE طراحی شده است که می‌توانید آن را به فرمت‌های Netpbm و برعکس تبدیل کنید.

Ivtools مجموعه‌ای از ویرایشگرهای ترسیم آزاد برای X Window System جهت تولید گرافیک‌های وب، Tex و Postscript و همچنین یک پوسته گرافیک برداری تعبیه‌پذیر و قابل‌توسعه است. این ابزار از امکانات Netpbm بهره می‌گیرد. ببینید: http://www.ivtools.org .

‏Chisato Yamauchi <cyamauch@ir.isas.jaxa.jp> یک کتابخانه گرافیکی آزاد برای C/Fortran نوشته است: EGGX/ProCall . او اظهار می‌دارد که سعی کرده ساده‌ترین بسته گرافیکی کاربردی را برای X بنویسد. این کتابخانه برای رسم روی یک پنجره X11 است، اما برای ذخیره‌سازی، خروجی PPM تولید می‌کند. او برای تبدیل به سایر فرمت‌ها، Netpbm را پیشنهاد می‌کند.

برنامه morph یک تصویر را به تصویری دیگر تبدیل تدریجی (morph) می‌کند. این برنامه از تصاویر با فرمت Targa استفاده می‌کند، اما می‌توانید از tgatoppm و ppmtotga برای کار با این فرمت بهره ببرید. شما باید از نرم‌افزار گرافیکی (X/Tk) با نام Xmorph برای ایجاد فایل‌های مش (mesh) که باید به morph داده شوند استفاده کنید. morph بخشی از بسته Xmorph است. ببینید: http://xmorph.sourceforge.net .

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

نرم‌افزارهای تجاری گوناگون Windows از ده‌ها قالبی پشتیبانی می‌کنند که Netpbm قادر به مدیریت آن‌ها نیست، به‌ویژه قالب‌هایی که معمولاً در برنامه‌های Windows به کار می‌روند. ImageMagick احتمالاً پرکاربردترین مبدل آزاد قالب‌های تصویر است و آن نیز از قالب‌های متعددی پشتیبانی می‌کند که در Netpbm پشتیبانی نمی‌شوند.

  • WebP در اکتبر ۲۰۱۰ توسط Google به عنوان جایگزینی فشرده‌تر برای JFIF (معروف به JPEG) در وب معرفی شد.
  • JPEG-LS شبیه به JFIF (معروف به JPEG) است، با این تفاوت که می‌تواند تمام اطلاعات موجود در هر تصویر شطرنجی (raster) را نمایش دهد، بنابراین می‌توانید به عنوان مثال از PNM بدون از دست دادن هیچ داده‌ای تبدیل را انجام دهید. CharLS یک کتابخانهٔ برنامه‌نویسی برای JPEG-LS است.
  • Lossless JPEG یک نسخهٔ بدون اتلاف مشابه از JPEG است. این قالب پیش از سایر گونه‌های JPEG بدون اتلاف ارائه شد، اما تنها توجهی کوتاه‌مدت به خود جلب کرد. می‌توانید کد رمزگذاری و رمزگشایی Lossless JPEG را در GitHub بیابید.
  • JPEG XR دامنه پویایی (dynamic range) بیشتر، بازهٔ رنگی وسیع‌تر و فشرده‌سازی کارآمدتری نسبت به JFIF (معروف به JPEG) ارائه می‌دهد. Windows و Internet Explorer، از ویندوز ۷ و اینترنت اکسپلورر ۹ به بعد، در کنار بسیاری از برنامه‌های دیگر این قالب را می‌شناسند. این قالب پیش‌تر با نام‌های Windows Media Photo و HD Photo شناخته می‌شد.
  • JPEG XL یک بهبود نسبت به JPEG است که در سال ۲۰۲۱ توسط همان گروه سازندهٔ JPEG و با هدف جایگزینی JPEG تولید شد. در میان سایر بهبودها، تولید و تفسیر آن ۶۰٪ سریع‌تر از JPEG است و یک حالت بدون اتلاف نیز دارد.

  • Direct Draw Surface (DDS) قالب بسته‌بندی استاندارد بالفعل (de facto) برای فشرده‌سازی بافت S3 است، همان‌طور که در تمام برنامه‌های مدرن گرافیک بی‌درنگ به کار می‌رود. علاوه بر ابزارهای مبتنی بر Windows، یک پلاگین Gimp نیز برای این قالب وجود دارد.
  • DjVu یک قالب وب‌محور و بستر نرم‌افزاری برای انتشار اسناد و تصاویر است. مروجان آن معتقدند که جایگزین مناسبی برای PDF، PS، TIFF، JFIF(JPEG) و GIF جهت انتشار اسناد اسکن‌شده، اسناد دیجیتال یا تصاویر با وضوح بالا است، زیرا سریع‌تر بارگیری می‌شود، نمایش و رندر سریع‌تری دارد، روی صفحه جلوه بهتری ارائه می‌دهد و منابع کلاینت کمتری را نسبت به قالب‌های رقیب مصرف می‌کند.

    برای اطلاعات بیشتر، به وب‌سایت DjVu مراجعه کنید.

  • VRML (Virtual Reality Modelling Language)

  • CALS (ایجادشده توسط وزارت دفاع ایالات متحده، مورد علاقهٔ معماران). این قالب در این فهرست سال ۱۹۹۷ از قالب‌های گرافیکی شرح داده شده است: http://www.faqs.org/faqs/graphics/fileformats-faq/part3 . قالب CALS در زمان‌های مختلف مخفف عبارات گوناگونی بوده است، که به نظر می‌رسد همگی اساساً یک قالب یکسان اما با احتمال تفاوت‌های جزئی باشند:

  • Computer Aided Logistics Support
  • Computer Aided Acquisition and Logistics Support
  • Continuous Acquisition and Life-cycle Support
  • Commerce At Light Speed

    نیروی دریایی ایالات متحده مشخصات فنی آن را منتشر کرده است.

  • قالب‌های آرایه‌ای dx، general، netcdf، CDF، hdf، cm

  • CGM+

  • قالب‌های HDR شامل OpenEXR، SGI TIFF LogLuv، floating point TIFF، Radiance RGBE
  • Windows Meta File (.WMF). کتابخانهٔ Libwmf از WMF به مواردی مثل Latex، PDF، PNG تبدیل می‌کند. برخی از این موارد می‌توانند به عنوان ورودی به Netpbm داده شوند.
  • قالب .doc نرم‌افزار Microsoft Word. مایکروسافت کنترلی انحصاری روی این قالب دارد. هر نرم‌افزاری که برای کار با آن می‌بینید احتمالاً تجاری و هزینه‌بر خواهد بود.
  • RTF
  • DXF (AutoCAD)

  • IOCA (Image Object Content Architecture) مشخصات این قالب توسط IBM مستند شده است: Data Stream and Object Architectures: Image Object Content Architecture Reference . برای نرم‌افزاری که این قالب را پردازش می‌کند، موارد بالا را ببینید.

  • OpenEXR یک قالب HDR است (مانند PFM(1)). نشانی http://www.openexr.com را ببینید.
  • تصویر بندانگشتی Xv Visual Schnauzer. این قالبی نسبتاً قدیمی است که توسط برنامهٔ Xv استفاده می‌شد. در محافل Netpbm، این قالب بیشتر به دلیل شباهت بسیار زیادش به قالب‌های Netpbm شناخته می‌شود و از همان امضای PAM یعنی ("P7") استفاده می‌کند، چرا که به عنوان نوعی انشعاب از مشخصات قالب Netpbm توسعه یافته بود.
  • YUV 4:2:0، معروف به YUV 420، و قالب‌های مشابه YUV 4:4:4، YUV 4:2:2، YUV 4:1:1، YUV 4:1:1s و YUV 4:1:0. سامانه‌های ویدیویی اغلب از این استفاده می‌کنند.
  • قالب ویدیویی MJPEG .

  • YUV4MPEG2 یک قالب ویدیویی است که هدف آن شبیه به هدف قالب‌های Netpbm برای تصاویر ثابت است. شما از آن برای دستکاری فیلم‌ها استفاده می‌کنید، نه برای ذخیره‌سازی یا ارسال آن‌ها. تنها کاربرد شناخته‌شده از این قالب با MJPEGTools است. برنامه‌های pnmtoy4m و y4mtopnm (و نسخه‌های پیشین آن‌ها ppmtoy4m و y4mtoppm) در آن بسته، میان یک جریان Netpbm و یک جریان YUV4MPEG2 تبدیل را انجام می‌دهند. همان‌طور که ممکن است از نام آن حدس بزنید، YUV4MPEG2 از نمایش داده‌ها به صورت YUV استفاده می‌کند، که برای کار با داده‌هایی که در نهایت MPEG2 هستند، بسیار راحت‌تر از نمایش RGB در قالب‌های Netpbm است.

Netpbm دارای تاریخچه‌ای طولانی است که در سال ۱۹۸۸ با بستهٔ Pbmplus اثر Jef Poskanzer آغاز شد. برای جزئیات به Netpbm web site(1) مراجعه کنید.

فایل doc/HISTORY در کد منبع Netpbm شامل تاریخچهٔ تفصیلی تغییرات به صورت نسخه به نسخه است.

Netpbm بر پایهٔ بستهٔ Pbmplus اثر Jef Poskanzer است که نخستین بار در سال ۱۹۸۸ توزیع شد و تا سال ۱۹۹۱ توسط او نگهداری می‌شد. اما این بسته شامل کارهای بی‌شمار نویسندگان دیگری نیز هست که از زمان کار اولیهٔ Jef افزوده شده‌اند. در واقع، این نام برگرفته از این حقیقت است که این پروژه‌ها توسط افرادی از سراسر جهان از طریق اینترنت مشارکت شده‌اند؛ زمانی که چنین همکاری‌هایی هنوز آن‌قدر بدیع و نوآورانه بود که ارزش داشت بسته بر اساس آن نام‌گذاری شود.

Bryan Henderson از سال ۱۹۹۹ نگهداری Netpbm را بر عهده داشته است. Bryan علاوه بر بسته‌بندی کارهای دیگران، مقدار قابل توجهی محتوای جدید نیز برای این بسته نوشته است.

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

http://netpbm.sourceforge.net/doc/index.html
19 May 2026 netpbm documentation