| PAM format specification(5) | File Formats Manual | PAM format specification(5) |
نام (NAME)
pam - قالب گرافیکی نگاشت آرایه دلخواه Netpbm (PAM)
کلیات (GENERAL)
قالب تصویر PAM یک قالب نگاشت دوبعدی با کمترین مخرج مشترک (سادهترین سطح سازگاری) است.
این قالب برای استفاده در انواع بیشماری از گرافیکها طراحی شده است، اما از نظر تئوری میتواند برای هر نوع دادهای که به صورت یک آرایه مستطیلی دوبعدی چیده شده باشد استفاده شود. در واقع، از دیدگاهی دیگر میتوان آن را به عنوان قالبی برای دادههای مرتبشده در یک آرایه سهبعدی در نظر گرفت.
نام «PAM» سرنامی برگرفته از «Portable Arbitrary Map» (نگاشت دلخواه قابلحمل) است. اگر این اشتقاق را در زمینه سایر نامهای قالب Netpbm، یعنی PBM، PGM و PPM در نظر بگیرید، معنای بیشتری پیدا میکند.
این قالب معنای دادهها را در هیچ نقطه مشخصی از آرایه تعریف نمیکند. دادهها میتوانند شدت نور قرمز، سبز و آبی باشند به گونهای که آرایه یک تصویر بصری را نشان دهد، یا میتوانند همان مؤلفههای قرمز، سبز و آبی به همراه یک مؤلفه شفافیت باشند، یا حتی میتوانند میزان بارندگی سالانه نقاط مختلف کره زمین را در بر داشته باشند. هر فرآیندی که از قالب PAM استفاده میکند باید این قالب را بیشتر تعریف کند تا معانی دادهها مشخص شود.
یک تصویر PAM یک شبکه دوبعدی از تاپلها (چندتاییها) را توصیف میکند. این تاپلها در سطرها و ستونها چیده شدهاند. عرض تصویر تعداد ستونها است. ارتفاع تصویر تعداد سطرها است. همه سطرها عرض یکسانی دارند و همه ستونها ارتفاع یکسانی دارند. تاپلها میتوانند هر درجهای داشته باشند، اما همه تاپلها دارای درجه یکسانی هستند. به درجه تاپلها، عمق تصویر (depth) گفته میشود. به هر یک از اعضای یک تاپل، یک نمونه (sample) میگویند. یک نمونه یک عدد صحیح بدون علامت است که مکانی را در امتداد مقیاسی نشان میدهد که از صفر آغاز شده و به مقدار بیشینه معینی به نام maxval ختم میشود. مقدار maxval برای تمامی نمونههای موجود در تصویر یکسان است. به آرایه دوبعدی متشکل از همه n-اُمین نمونههای هر تاپل، صفحه n-اُم (Nth plane) یا کانال n-اُم (Nth channel) تصویر گفته میشود.
اگرچه قالب پایه هیچ معنایی را به مقادیر تاپل اختصاص نمیدهد، اما شامل یک رشته اختیاری است که آن معنا را شرح میدهد. محتوای این رشته، موسوم به نوع تاپل (tuple type)، از دیدگاه قالب پایه PAM دلخواه است، اما کاربران این قالب میتوانند بر اساس قرارداد معنایی به آن اختصاص دهند تا بتوانند پیادهسازیهای خاص خود را از قالب PAM شناسایی کنند. برخی از انواع تاپل به عنوان زیرقالبهای رسمی PAM تعریف شدهاند. بخش انواع تاپل تعریفشده را ببینید.
دنیای گیجکننده قالبهای Netpbm (The Confusing Universe of Netpbm Formats)
سردرگم شدن درباره رابطه بین قالب PAM و قالبهای PBM، PGM، PPM و PNM آسان است. در اینجا توضیح مختصری برای روشن شدن موضوع آورده شده است:
«PNM» در واقع یک قالب واقعی نیست، بلکه یک عنوان اختصاری برای اشاره به قالبهای PBM، PGM و PPM به صورت جمعی است. همچنین نام دستهای از توابع کتابخانهای است که هر کدام میتوانند هر سه قالب مذکور را مدیریت کنند.
«PAM» در واقع چهارمین قالب است. اما آنچنان عمومی است که میتوانید همان اطلاعاتی را که در یک تصویر PBM، PGM یا PPM میگنجد، در یک تصویر PAM نیز نمایش دهید. در عمل، برنامهای که برای خواندن PBM، PGM یا PPM طراحی شده و این کار را با نسخه جدید کتابخانه Netpbm انجام میدهد، یک تصویر معادل PAM را نیز بدون هیچ مشکلی میخواند و برنامه هرگز متوجه تفاوتی نخواهد شد.
برای اینکه اوضاع پیچیدهتر شود، مجموعهای از روالهای کتابخانهای موسوم به توابع «pam» وجود دارند که قالب PAM را میخوانند و مینویسند، اما قالبهای PBM، PGM و PPM را نیز خوانده و مینویسند. آنها این کار را به این دلیل انجام میدهند که قالبهای قدیمیتر بسیار باقدمتتر و محبوبتر هستند، بنابراین حتی یک برنامه جدید نیز باید بتواند با آنها کار کند. پشتیبانی کتابخانه از تمامی این قالبها، نوشتن برنامههایی را که از قالب جدیدتر PAM نیز استفاده میکنند بسیار آسان میسازد.
طرحبندی و ساختار (THE LAYOUT)
یک راه مناسب برای خواندن و نوشتن دقیق قالب PAM، استفاده از کتابخانه زیرروالهای زبان C با نام libnetpbm(1) است.
یک فایل PAM از دنبالهای شامل یک یا چند تصویر PAM تشکیل شده است. هیچ داده، جداکننده یا لایه فاصلهگذاری (padding) قبل، بعد یا بین تصاویر وجود ندارد.
هر تصویر PAM شامل یک سرایند (header) است که بلافاصله با یک شطرنجی (raster) دنبال میشود.
در اینجا نمونهای از یک سرایند آورده شده است:
<span style="font-family: monospace"> P7 WIDTH 227 HEIGHT 149 DEPTH 3 MAXVAL 255 TUPLTYPE RGB ENDHDR </span>
سرایند با نویسههای اسکی «P7» و به دنبال آن یک خط جدید (newline) آغاز میشود. این همان عدد جادویی (magic number) است.
نکته: تصاویر بندانگشتی xv نیز با عدد جادویی «P7» شروع میشوند (این قالب و PAM هر دو گسترشهای مستقلی برای قالبهای Netpbm بودند). با این حال، ادامه قالب باعث میشود تمایز PAM از آن فرمت بسیار آسان باشد.
سرایند با تعداد دلخواهی از خطوط متنی اسکی ادامه مییابد. هر خط به یک نویسه خط جدید ختم شده و با آن تفکیک میشود.
هر خط سرایند از صفر یا چند نشانه (token) تشکیل شده که با فاصله خالی از هم جدا شدهاند، یا با «#» شروع میشود. اگر با «#» شروع شود، یک توضیح (comment) است و بقیه این مشخصات بر آن اعمال نمیشود.
یک خط سرایند که صفر نشانه دارد معتبر است اما هیچ معنایی ندارد.
نوع خط سرایند با اولین نشانه آن که ۸ نویسه یا کمتر است مشخص میشود:
- ENDHDR
- این آخرین خط در سرایند است. سرایند باید دقیقاً یکی از این خطوط سرایند را داشته باشد.
- HEIGHT
- نشانه دوم یک عدد دهدهی است که ارتفاع تصویر (تعداد سطرها) را نشان میدهد. سرایند باید دقیقاً یکی از این خطوط سرایند را داشته باشد.
- WIDTH
- نشانه دوم یک عدد دهدهی است که عرض تصویر (تعداد ستونها) را نشان میدهد. سرایند باید دقیقاً یکی از این خطوط سرایند را داشته باشد.
- DEPTH
- نشانه دوم یک عدد دهدهی است که عمق تصویر (تعداد صفحهها یا کانالها) را نشان میدهد. سرایند باید دقیقاً یکی از این خطوط سرایند را داشته باشد.
- MAXVAL
- نشانه دوم یک عدد دهدهی است که مقدار maxval تصویر را نشان میدهد. سرایند باید دقیقاً یکی از این خطوط سرایند را داشته باشد.
- TUPLTYPE
- سرایند
میتواند
هر تعداد از
این خطوط را
داشته
باشد، از
جمله صفر.
ادامه خط
بخشی از نوع
تاپل است.
ادامه خط به
نشانه
تقسیم
نمیشود،
اما نوع
تاپل شامل
هیچ فاصله
خالی که
بلافاصله
پس از TUPLTYPE
میآید یا
در انتهای
خط قرار
دارد
نمیشود.
این مقدار
شامل نویسه
خط جدید نیز
نمیشود.
بعد از
نشانه TUPLTYPE
باید چیزی
غیر از
فاصله خالی
وجود داشته
باشد.
اگر چندین خط سرایند TUPLTYPE وجود داشته باشد، نوع تاپل حاصل الحاق مقادیر هر یک از آنها است که با یک فاصله ساده از هم جدا شدهاند، به همان ترتیبی که در سرایند ظاهر میشوند. اگر هیچ خط سرایند TUPLTYPE وجود نداشته باشد، نوع تاپل رشته تهی (null string) خواهد بود.
بخش شطرنجی (raster) شامل تکتک سطرهای تصویر است که به ترتیب از بالا به پایین و پشت سر هم بدون هیچگونه جداکنندهای در میان، قبل یا بعد از سطرها قرار گرفتهاند.
هر سطر شامل تمام تاپلهای آن سطر است که به ترتیب از چپ به راست و پشت سر هم بدون هیچگونه جداکنندهای در میان، قبل یا بعد از تاپلها قرار دارند.
هر تاپل شامل تمام نمونههای آن تاپل است که به ترتیب و پشت سر هم بدون هیچگونه جداکنندهای در میان، قبل یا بعد از نمونهها قرار گرفتهاند.
هر نمونه شامل یک عدد صحیح بدون علامت در قالب باینری خالص است که بایت با بالاترین ارزش (most significant byte) اول میآید. تعداد بایتها حداقل تعداد بایتهای مورد نیاز برای نمایش maxval تصویر است.
نویسهای که در اینجا به عنوان «خط جدید» (newline) نامیده میشود، نویسهای است که در اسکی با نام Line Feed یا LF شناخته میشود.
محدودیتها (LIMITATIONS)
مقادیر ارتفاع (Height)، عرض (width)، عمق (depth) و maxval حداقل ۱ هستند.
برای ارتفاع، عرض و عمق هیچ مقدار بیشینهای تعریف نشده است، اما پردازندهها و تولیدکنندگان تصاویر معمولاً محدودیتهای خود را دارند.
مقدار maxval یک تصویر هرگز بزرگتر از ۶۵۵۳۵ نیست (دلیل این محدودیت، تسهیل در ساخت پردازندههای تصویر است که در آنها مقادیر محاسباتی میانی اغلب باید در ۳۱ یا ۳۲ بیت جای گیرند). قبل از اکتبر ۲۰۰۵ هیچ محدودیت مشخصی وجود نداشت، اما در عمل تقریباً تمام پیادهسازیها همیشه آن را رعایت کردهاند.
انواع تاپل تعریفشده (DEFINED TUPLE TYPES)
برخی از انواع تاپل در این مشخصات تعریف شدهاند تا زیرقالبهای رسمی PAM را برای کاربردهای بسیار محبوب این قالب تعیین کنند. کاربران این قالب همچنین میتوانند انواع تاپل اختصاصی خود و در نتیجه زیرقالبهای خاص خود را تعریف نمایند.
نوع تاپل تنها بر معنای نمونهها (که اعداد صحیح بدون علامت هستند) در تاپلهای تصویر تأثیر میگذارد. این ویژگی تأثیری بر نحوه کدگذاری نمونهها یا تاپلها ندارد. نوع تاپل ممکن است بر معنای موقعیت یک تاپل در آرایه تأثیر بگذارد (برای مثال ممکن است در یک تصویر بصری مشخص کند که تاپل موجود در سطر ۱ در بالای تصویر قرار دارد نه در پایین آن).
نوع تاپل هرگز تعیین نمیکند که چه تعداد نمونه در یک تاپل وجود دارد (این مورد در عوض توسط خط سرایند DEPTH تعیین میشود). میتوان گفت که نوع تاپل به طور تلویحی یک عمق (تعداد نمونهها در هر تاپل) را نشان میدهد زیرا برخی از انواع تاپل تنها در ترکیب با مقادیر مشخصی از DEPTH معتبر هستند، اما بر اساس قواعد برنامهنویسی خوب، بهتر است هنگام رمزگشایی شطرنجی از DEPTH برای عمق استفاده شود و به طور جداگانه بررسی گردد که عمق با نوع تاپل مطابقت دارد. همچنین، پذیرش عمقی که بسیار زیاد است و صرفاً نادیده گرفتن صفحههای با شماره بالاتر، یک روش مناسب در برنامهنویسی به شمار میرود.
استفاده از PAM برای تصاویر بصری (PAM Used For Visual Images)
یک کاربرد رایج تصاویر PAM، نمایش تصاویر بصری است؛ همان تصاویری که به طور سنتی توسط قالبهای قدیمیتر و ملموستر PBM، PGM و PPM نمایش داده میشوند.
سیاه و سفید (Black And White)
یک تصویر سیاه و سفید، که در حالت دیگر میتوانست توسط یک تصویر PBM نمایش داده شود، دارای نوع تاپل «BLACKANDWHITE» است. چنین تصویر PAM دارای عمق ۱ و maxval برابر با ۱ است که در آن، تکنمونه موجود در هر تاپل برای نمایش یک پیکسل سیاه مقدار 0 و برای نمایش یک پیکسل سفید مقدار 1 دارد. مقادیر maxval، ارتفاع، عرض و ترتیب تاپلها در شطرنجی رابطه مشخص و مشابهی با مقادیر تصویر معادل PBM دارند.
توجه داشته باشید که در قالب PBM مقدار نمونه صفر به معنای سفید است، اما در PAM مقدار صفر به معنای سیاه است.
طیف خاکستری (Grayscale)
یک تصویر در طیف خاکستری، که در حالت دیگر میتوانست توسط یک تصویر PGM نمایش داده شود، دارای نوع تاپل «GRAYSCALE» است. چنین تصویر PAM دارای عمق ۱ است. مقادیر maxval، ارتفاع، عرض و شطرنجی رابطه مشخص و مشابهی با تصویر معادل PGM دارند.
رنگی (Color)
یک تصویر رنگی، که در حالت دیگر میتوانست توسط یک تصویر PPM نمایش داده شود، دارای نوع تاپل «RGB» است. چنین تصویر PAM دارای عمق ۳ است. مقادیر maxval، ارتفاع، عرض و شطرنجی رابطه مشخص و مشابهی با تصویر معادل PPM دارند. صفحه اول رنگ قرمز، صفحه دوم رنگ سبز و صفحه سوم رنگ آبی را نشان میدهد.
شفاف (Transparent)
هر یک از قالبهای تصویر بصری ذکرشده در بالا دارای گونهای است که اطلاعات شفافیت را در بر دارد. در این گونه، عبارت «_ALPHA» به نوع تاپل افزوده میشود (مانند «RGB_ALPHA») و یک صفحه دیگر نیز به آن اضافه میگردد. صفحهای که بالاترین شماره را دارد، صفحه کدر بودن یا ماتی (گاهی صفحه آلفا یا صفحه شفافیت خوانده میشود) است.
در این نوع تصویر، رنگ نمایشدادهشده توسط یک پیکسل در واقع ترکیبی از رنگ پیشزمینه مشخصشده به طور صریح و یک رنگ پسزمینه است که بعداً مشخص میشود.
صفحههایی غیر از صفحه کدر بودن، رنگ پیشزمینه را توصیف میکنند. یک نمونه در صفحه کدر بودن مشخص میکند که پیکسل تا چه حد کدر (غیرشفاف) است؛ با مشخص کردن اینکه چه کسری از نور پیکسل از رنگ پیشزمینه سرچشمه میگیرد. باقی نور پیکسل از رنگ پسزمینه (نامشخص) تأمین میشود.
به عنوان مثال، در یک تصویر GRAYSCALE_ALPHA، فرض کنید صفحه 0 نشاندهنده یک تن خاکستری با ۶۰٪ سفیدی و صفحه 1 نشاندهنده کدر بودن به میزان ۲۵٪ باشد. رنگ پیشزمینه ۶۰٪ خاکستری است و ۲۵٪ از آن در رنگ نهایی پیکسل سهیم است. ۷۵٪ دیگر از رنگ پسزمینه تأمین میشود. پس فرض کنیم رنگ پسزمینه پیکسل کاملاً سفید باشد. در این صورت رنگ پیکسل ۹۰٪ سفید خواهد بود: ۲۵٪ از ۶۰٪ پیشزمینه به علاوه ۷۵٪ از ۱۰۰٪ پسزمینه.
مقدار نمونه همان کسر کدر بودن توصیفشده است که به صورت کسری از maxval بیان میشود. توجه داشته باشید که این مقدار بر خلاف نمونههای رنگ پیشزمینه، اصلاح گاما (gamma-adjusted) نشده است.
نوع رسانه اینترنتی (INTERNET MEDIA TYPE)
هیچ نوع رسانه اینترنتی (که با نام MIME type یا نوع محتوا نیز شناخته میشود) برای PAM در IANA به ثبت نرسیده است، اما مقدار غیررسمی <span style="font-family: monospace">image/x-portable-arbitrarymap</span> توسط این مشخصات تعیین شده است تا با مقادیر متداول برای قالبهای قدیمیتر Netpbm سازگار باشد.
نام فایل (FILE NAME)
پسوند مرسوم برای نام فایل PAM عبارت «.pam» است. اما این مورد اجباری نیست.
همچنین ببینید (SEE ALSO)
منبع سند (DOCUMENT SOURCE)
این صفحه راهنما توسط ابزار «makeman» از Netpbm بر اساس منبع HTML تولید شده است. مستندات اصلی در نشانی زیر قرار دارد:
| 27 November 2013 | netpbm documentation |