راهنمای کاربر Pnmtojpeg(0) راهنمای کاربر Pnmtojpeg(0)

pnmtojpeg - تبدیل تصویر با فرمت PNM به فایل فشرده تصویری JPEG/JFIF

pnmtojpeg [-exif=filespec] [-quality=n] [{-grayscale|-greyscale}] [-density=nxn[dpi,dpcm]] [-optimize|-optimise] [-rgb] [-progressive] [-comment=text] [-dct={int|fast|float}] [-arithmetic] [-restart=n] [-smooth=n] [-maxmemory=n] [-verbose] [-baseline] [-qtables=filespec] [-qslots=n[,...]] [-sample=HxV[,...]] [-scans=filespec] [-tracelevel=N]

filename

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

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

دستور pnmtojpeg فایل تصویر مشخص‌شده با فرمت PBM، PGM یا PPM (یا در صورت عدم تعیین فایل، ورودی استاندارد) را به یک فایل JFIF در خروجی استاندارد تبدیل می‌کند.

دستور pnmtojpeg برای ایجاد فایل خروجی از کتابخانه JPEG گروه مستقل JPEG (موسوم به IJG) استفاده می‌کند. برای کسب اطلاعات بیشتر درباره این کتابخانه به نشانی http://www.ijg.org مراجعه کنید.

«JFIF» نام صحیح فرمت تصویری است که عموماً با عنوان «JPEG» شناخته می‌شود. از نظر فنی دقیق، JPEG یک روش فشرده‌سازی است. فرمت تصویری که از فشرده‌سازی JPEG استفاده می‌کند و با اختلاف زیاد رایج‌ترین است، JFIF نام دارد. همچنین زیرفرمت خاصی از TIFF وجود دارد که از فشرده‌سازی JPEG استفاده می‌کند.

فرمت EXIF یک زیرفرمت از JFIF است (به طور دقیق، یک فایل JFIF که شامل یک هدر EXIF به عنوان نشانگر APP1 است). با تعیین گزینه -exif ، دستور pnmtojpeg یک تصویر EXIF ایجاد می‌کند.

علاوه بر گزینه‌های مشترک بین تمام برنامه‌های مبتنی بر libnetpbm (به‌ویژه -quiet ، بخش گزینه‌های مشترک را ببینید)، دستور pnmtojpeg گزینه‌های خط فرمان زیر را شناسایی می‌کند:

این گزینه مشخص می‌کند که تصویر خروجی باید EXIF (زیرفرمتی از JFIF) باشد، به این معنی که دارای یک هدر EXIF به عنوان نشانگر JFIF APP1 خواهد بود. محتوای این نشانگر، همان محتوای فایل مشخص‌شده است. مقدار ویژه - به معنی خواندن محتوای هدر EXIF از ورودی استاندارد است. تعیین ورودی استاندارد به صورت همزمان هم برای هدر EXIF و هم برای تصویر ورودی نامعتبر است.

فایل EXIF با یک فیلد دو بایتی شروع می‌شود که طول فایل (شامل خود فیلد طول) را به صورت دودویی خالص با اولویت بایت پرارزش‌تر (most significant byte first) مشخص می‌کند. مقدار ویژه صفر برای فیلد طول به این معنی است که هیچ هدر EXIF نباید وجود داشته باشد؛ یعنی همانند عدم استفاده از گزینه -exif است. این قابلیت زمانی مفید است که فایلی را با jpegtopnm از JFIF به PNM تبدیل کرده، سپس آن را دستکاری نموده و مجدداً با pnmtojpeg به JFIF تبدیل می‌کنید، در حالی که نمی‌دانید آیا حاوی هدر EXIF بوده است یا خیر. زمانی که فایل JFIF ورودی فاقد هدر EXIF باشد، دستور jpegtopnm یک فایل EXIF ایجاد می‌کند که تنها شامل دو بایت صفر است. بنابراین، می‌توانید بدون نگرانی از وجود واقعی هدر EXIF، هر هدر EXIF را از JFIF ورودی به JFIF خروجی منتقل کنید.

محتوای فایل EXIF پس از فیلد طول، دقیقاً بایت به بایت همان محتوای نشانگر APP1 (بدون احتساب فیلد طول) است که هدر EXIF را تشکیل می‌دهد.

مقیاس‌بندی جدول‌های کوانتیزاسیون برای تنظیم کیفیت تصویر. مقدار n عددی از 0 (بدترین) تا 100 (بهترین) است؛ مقدار پیش‌فرض 75 می‌باشد. مقادیر زیر حدود 25 ممکن است تصاویری تولید کنند که برخی مفسرها قادر به پردازش و نمایش آن‌ها نباشند. برای اطلاعات بیشتر به توضیحات پایین مراجعه کنید.
این گزینه‌ها فضای رنگی مورد استفاده در خروجی JFIF را تعیین می‌کنند. -grayscale (یا -greyscale) به معنای ایجاد یک JFIF در مقیاس خاکستری است و در صورت نیاز ورودی رنگی PPM را تبدیل می‌کند. گزینه -rgb به معنای ایجاد یک JFIF با فضای رنگی RGB است و اگر ورودی PPM نباشد، اجرای برنامه با شکست مواجه می‌شود.

اگر هیچ‌کدام را مشخص نکنید، در صورتی که ورودی PPM باشد فایل خروجی در فرمت YCbCr و اگر ورودی PBM یا PGM باشد در فرمت مقیاس خاکستری (grayscale) خواهد بود.

فرمت YCbCr (که در آن یک رنگ با یک مقدار روشنایی/شدت نور و دو مقدار تفاوت رنگ نمایش داده می‌شود) معمولاً بسیار بهتر از RGB (که در آن یک رنگ با مقادیر قرمز، سبز و آبی نمایش داده می‌شود) فشرده می‌شود. استفاده از RGB نادر است، اما ممکن است تبدیل بین JFIF و PPM با RGB سریع‌تر انجام شود، زیرا همان فضای رنگی مورد استفاده در PPM است.

فایل testimg.ppm که همراه Netpbm ارائه می‌شود، با گزینه -rgb حدود 2.3 برابر بزرگتر از حالت پیش‌فرض YCbCr است و در یک آزمایش، دستور pnmtojpeg برای تبدیل آن 16 درصد زمان CPU بیشتری مصرف کرد. این زمان اضافی احتمالاً نشان می‌دهد پردازش حجم داده‌های فشرده اضافی، تمام زمان صرفه‌جویی‌شده ناشی از عدم نیاز به تبدیل ورودی‌های RGB به YCbCr را مصرف کرده است.

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

گزینه -rgb در Netpbm نسخه 10.11 در اکتبر 2002 اضافه شد.

این گزینه اطلاعات چگالی (یا همان وضوح/رزولوشن) ثبت‌شده در تصویر خروجی JFIF را تعیین می‌کند. این گزینه به هیچ وجه بر داده‌های شطرنجی (raster) تأثیر نمی‌گذارد؛ بلکه فقط به برنامه‌ای که JFIF را می‌خواند نحوه تفسیر تصویر شطرنجی را اعلام می‌کند.

مقدار چگالی به فرمت xxy همراه با یک واحد اختیاری به صورت dpi یا dpcm دریافت می‌شود. مثال‌ها: 1x1 ، 3x2 ، 300x300dpi ، 100x200dpcm . عدد اول چگالی افقی و عدد دوم چگالی عمودی است. هر یک می‌توانند هر عدد صحیحی بین 1 تا 65535 باشند. مشخص‌کننده واحد به صورت dpi برای نقطه در اینچ یا dpcm برای نقطه در سانتی‌متر است. اگر واحد را مشخص نکنید، اطلاعات چگالی در JFIF با عنوان صریح «چگالی نامشخص» (که با عنوان «ناشناخته» نیز تفسیر می‌شود) ثبت می‌گردد. شاید این بی‌فایده به نظر برسد، اما توجه داشته باشید که حتی بدون تعیین واحد، اعداد چگالی نسبت تصویر (aspect ratio) پیکسل‌ها را مشخص می‌کنند. برای نمونه، 1x1 نشان می‌دهد پیکسل‌ها مربع هستند و 3x2 نشان می‌دهد پیکسل‌ها مستطیل‌های عمودی هستند.

توجه داشته باشید که اگر چگالی‌های افقی و عمودی متفاوتی را مشخص کنید، تصویر JFIF حاصل یک بازنمایی واقعی از تصویر PNM ورودی نخواهد بود، زیرا pnmtojpeg تصویر شطرنجی را پیکسل‌به‌پیکسل تبدیل می‌کند و پیکسل‌های یک تصویر PNM طبق تعریف مربع هستند. بنابراین اگر با یک تصویر مربعی PNM شروع کنید و گزینه -density=3x2 را مشخص نمایید، تصویر JFIF حاصل نسخه فشرده‌شده افقی از تصویر اصلی خواهد بود. با این حال، استفاده از تصویر ورودی با اندکی تفاوت نسبت به PNM استاندارد که در آن پیکسل‌ها مربع نیستند رایج است. در این حالت، گزینه density مناسب بازتولید دقیقی از تصویر شبه-PNM ورودی ارائه می‌دهد.

مقدار پیش‌فرض 1x1 در واحدهای نامشخص است.

پیش از Netpbm نسخه 10.15 (آوریل 2003)، این گزینه وجود نداشت و دستور pnmtojpeg همواره یک فایل JFIF با چگالی 1x1 در واحدهای نامشخص ایجاد می‌کرد.

بهینه‌سازی پارامترهای کدگذاری آنتروپی را انجام می‌دهد. بدون این گزینه، pnmtojpeg از پارامترهای کدگذاری پیش‌فرض استفاده می‌کند. -optimize معمولاً فایل JFIF را اندکی کوچکتر می‌کند، اما اجرای pnmtojpeg تا حدی کندتر شده و به حافظه بسیار بیشتری نیاز دارد. کیفیت تصویر و سرعت خروج از حالت فشرده (decompression) تحت تأثیر -optimize قرار نمی‌گیرد.
یک فایل JPEG تدریجی (progressive JPEG) ایجاد می‌کند (توضیحات پایین را ببینید).
یک نشانگر نظر (comment marker) با متن text در خروجی JFIF قرار می‌دهد.

بدون این گزینه، هیچ نشانگر نظری در خروجی درج نمی‌شود.

گزینه -quality به شما امکان می‌دهد تعادلی میان اندازه فایل فشرده و کیفیت تصویر بازسازی‌شده برقرار کنید: هرچه تنظیم کیفیت بالاتر باشد، فایل JFIF بزرگتر شده و تصویر خروجی به ورودی اصلی نزدیک‌تر خواهد بود. در حالت عادی می‌خواهید از کمترین تنظیم کیفیتی (کوچک‌ترین اندازه فایل) استفاده کنید که هنگام خروج از فشردگی، از نظر بصری با تصویر اصلی غیرقابل تشخیص باشد. برای این منظور، تنظیم کیفیت بین 50 تا 95 نتایج معقولی به همراه دارد؛ مقدار پیش‌فرض 75 معمولاً مناسب است. اگر در کیفیت -quality=75 نقصی مشاهده کردید، هر بار مقدار را 5 یا 10 واحد افزایش دهید تا از تصویر خروجی رضایت پیدا کنید (تنظیم بهینه از تصویری به تصویر دیگر متفاوت خواهد بود).

تنظیم -quality=100 یک جدول کوانتیزاسیون با تمام مقادیر 1 تولید می‌کند که اتلاف در مرحله کوانتیزاسیون را به حداقل می‌رساند (اما همچنان در زیرنمونه‌گیری و همچنین خطای گرد کردن، اتلاف اطلاعات وجود دارد). این تنظیم عمدتاً برای اهداف آزمایشی کاربرد دارد. مقادیر کیفیت بالاتر از 95 برای استفاده عادی توصیه نمی‌شوند؛ زیرا حجم فایل فشرده بدون هیچ بهبود ملموسی در کیفیت تصویر خروجی به شدت افزایش می‌یابد.

در جهت مخالف، مقادیر کیفیت زیر 50 فایل‌های بسیار کوچکی با کیفیت تصویر پایین تولید می‌کنند. برای مثال، تنظیمات حدود 5 تا 10 ممکن است برای تهیه نمایه از یک کتابخانه بزرگ تصاویر مفید باشد. برای مشاهده برخی جلوه‌های جالب به سبک کوبیسم، مقدار -quality=2 (یا حول‌وحوش آن) را امتحان کنید. (توجه: مقادیر کیفیت زیر حدود 25 جدول‌های کوانتیزاسیون 2 بایتی تولید می‌کنند که در استاندارد JFIF اختیاری در نظر گرفته شده‌اند. دستور pnmtojpeg هنگام تعیین چنین کیفیتی یک پیام هشدار صادر می‌کند، زیرا برخی برنامه‌های دیگر JFIF ممکن است نتوانند فایل حاصل را رمزگشایی کنند. در صورتی که نیاز به تضمین سازگاری در مقادیر کیفیت پایین دارید، از گزینه -baseline استفاده کنید.)

گزینه -progressive یک فایل «JPEG تدریجی» ایجاد می‌کند. در این نوع فایل JFIF، داده‌ها در چندین پویش (scan) با کیفیت فزاینده ذخیره می‌شوند. اگر فایل از طریق یک پیوند ارتباطی کند در حال انتقال باشد، رمزگشا می‌تواند با استفاده از اولین پویش خیلی سریع یک تصویر با کیفیت پایین را نمایش دهد و سپس با هر پویش بعدی کیفیت نمایش را بهبود بخشد. تصویر نهایی دقیقاً معادل یک فایل استاندارد JFIF با همان تنظیم کیفیت است و حجم کل فایل تقریباً یکسان بوده و اغلب اندکی کوچکتر است.

احتیاط: فرمت progressive JPEG هنوز به طور گسترده پیاده‌سازی نشده است، بنابراین ممکن است بسیاری از رمزگشاها اصلاً قادر به مشاهده یک فایل JPEG تدریجی نباشند.

اگر به دنبال کنترل تعادل میان کیفیت و اندازه فایل هستید، می‌توانید فرمت JPEG2000 را نیز در نظر بگیرید. دستور pamtojpeg2k(1) را ببینید.

استفاده از روش DCT عدد صحیح (پیش‌فرض).
استفاده از روش DCT عدد صحیح سریع (با دقت کمتر).
استفاده از روش DCT ممیز شناور (floating-point). روش ممیز شناور دقت بسیار اندکی بیشتر از روش int دارد، اما بسیار کندتر است مگر اینکه سیستم شما سخت‌افزار ممیز شناور بسیار سریعی داشته باشد. همچنین توجه داشته باشید که نتایج روش ممیز شناور ممکن است در سیستم‌های مختلف اندکی متفاوت باشد، در حالی که روش‌های عدد صحیح باید در همه جا نتایج یکسانی بدهند. روش عدد صحیح سریع دقت بسیار کمتری نسبت به دو روش دیگر دارد.
استفاده از کدگذاری حسابی (arithmetic coding). پیش‌فرض کدگذاری هافمن (Huffman encoding) است. کدگذاری حسابی معمولاً نتیجه کم‌حجم‌تری به همراه دارد.

ممکن است برای استفاده از این گزینه به مجوزهای ثبت اختراع نیاز داشته باشید. طبق پرسش‌های متداول JPEG ، این روش تحت پوشش پتنت‌های متعلق به IBM، AT&T و Mitsubishi قرار دارد.

نویسنده FAQ توصیه می‌کند از کدگذاری حسابی (و در نتیجه این گزینه) استفاده نکنید زیرا صرفه‌جویی در حجم آن‌قدر زیاد نیست که دردسرهای قانونی آن را توجیه کند.

بیشتر کتابخانه‌های JPEG، از جمله تمام موارد توزیع‌شده توسط گروه مستقل JPEG از حدود سال 1998 به بعد، قادر به کدگذاری حسابی نیستند. دستور pnmtojpeg برای کدگذاری JPEG از یک کتابخانه JPEG استفاده می‌کند (که یا هنگام ساخت باینری pnmtojpeg به آن متصل شده یا در زمان اجرا در سیستم شما در دسترس است). اگر pnmtojpeg با پیام «Sorry, there are legal restrictions on arithmetic coding» یا «Sorry, arithmetic coding not supported» متوقف شود، علت همین مسئله است.

درج نشانگر راه‌اندازی مجدد JPEG (restart marker) در هر n سطر MCU، یا در صورتی که حرف B را به عدد بچسبانید، در هر n بلوک MCU. مقدار -restart 0 (حالت پیش‌فرض) به معنی عدم استفاده از نشانگرهای راه‌اندازی مجدد است.
هموارسازی (smoothing) تصویر ورودی برای حذف نویز ترام‌دهی (dithering). مقدار n بین 1 تا 100، شدت هموارسازی را مشخص می‌کند. مقدار 0 (پیش‌فرض) به معنی عدم هموارسازی است.
تعیین سقف حافظه برای استفاده در پردازش تصاویر بزرگ. مقدار به هزار بایت است، یا اگر حرف M را به انتهای عدد اضافه کنید، به میلیون بایت خواهد بود. برای مثال، -max=4m مقدار 4,000,000 بایت را انتخاب می‌کند. اگر pnmtojpeg به فضای بیشتری نیاز داشته باشد، از فایل‌های موقت استفاده خواهد کرد.
چاپ پیام‌های مربوط به فرآیند تبدیل در جریان خطای استاندارد (Standard Error). این قابلیت می‌تواند در عیب‌یابی مشکلات مفید باشد.

گزینه -restart به pnmtojpeg دستور می‌دهد تا نشانگرهای اضافی درج کند که به رمزگشای JPEG امکان می‌دهد پس از رخ دادن خطای انتقال مجدداً همگام‌سازی شود. بدون نشانگرهای شروع مجدد، هرگونه خرابی در یک فایل فشرده معمولاً تصویر را از نقطه بروز خطا تا انتهای تصویر تخریب می‌کند؛ اما با وجود این نشانگرها، خرابی معمولاً به بخش بعد از نشانگر تا نشانگر بعدی محدود می‌شود. البته نشانگرهای راه‌اندازی مجدد فضای اضافی اشغال می‌کنند. ما گزینه -restart=1 را برای تصاویری که قرار است روی شبکه‌های غیرقابل اعتماد مانند Usenet منتقل شوند توصیه می‌کنیم.

گزینه -smooth ورودی را برای حذف نویزهای ریز فیلتر می‌کند. این گزینه اغلب هنگام تبدیل تصاویر ترام‌دار به JFIF کاربرد دارد: ضریب هموارسازی معتدل بین 10 تا 50 الگوهای ترام در فایل ورودی را حذف می‌کند که منجر به یک فایل JFIF کوچکتر و تصویری با ظاهر بهتر می‌شود. با این حال، ضریب هموارسازی بیش از حد بزرگ تصویر را به طور مشهودی تار خواهد کرد.

اجبار به ایجاد جدول‌های کوانتیزاسیون سازگار با بیس‌لاین (baseline-compatible). این کار مقادیر کوانتیزاسیون را حتی در تنظیمات کیفیت پایین به 8 بیت محدود می‌کند. (این سوییچ نام‌گذاری نامناسبی دارد، زیرا تضمین نمی‌کند که خروجی حتماً JPEG بیس‌لاین باشد. برای نمونه، می‌توانید از -baseline و -progressive در کنار یکدیگر استفاده کنید.)
استفاده از جدول‌های کوانتیزاسیون ارائه‌شده در فایل متنی مشخص‌شده.
انتخاب اینکه از کدام جدول کوانتیزاسیون برای هر مولفه رنگی استفاده شود.
تعیین فاکتورهای نمونه‌برداری JPEG برای هر مولفه رنگی.
استفاده از اسکریپت پویش ارائه‌شده در فایل متنی مشخص‌شده. برای اطلاعات بیشتر درباره اسکریپت‌های پویش به بخش‌های پایین مراجعه کنید.
سطح ردیابی اشکال‌زدایی را که برنامه هنگام اجرا تولید می‌کند تنظیم می‌کند. مقدار 0 به معنای غیرفعال بودن و حالت پیش‌فرض است. این سطح عمدتاً ردیابی کتابخانه JPEG را کنترل می‌کند و می‌توانید اطلاعات بسیار جالبی در مورد فرآیند فشرده‌سازی به دست آورید.

گزینه‌های «جادویی» (wizard) برای آزمایش و تجربه با JPEG در نظر گرفته شده‌اند. اگر دقیقاً نمی‌دانید چه کاری انجام می‌دهید، از آن‌ها استفاده نکنید. این سوییچ‌ها به طور کامل‌تر در فایل wizard.doc که همراه با کتابخانه JPEG گروه مستقل JPEG ارائه می‌شود مستند شده‌اند.

این مثال فایل PPM با نام foo.ppm را با ضریب کیفیت 60 فشرده کرده و خروجی را با نام foo.jpg ذخیره می‌کند:

pnmtojpeg -quality=60 foo.ppm > foo.jpg

در اینجا یک مثال کاربردی‌تر آورده شده است که فرمت BMP را به JFIF تبدیل می‌کند:

cat foo.bmp | bmptoppm | pnmtojpeg > foo.jpg

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

برای جلوگیری از این امر، می‌توانید از یک فرمت تصویر فشرده غیر از JPEG استفاده کنید. فرمت‌های PNG و JPEG2000 انتخاب‌های خوبی هستند و Netpbm شامل مبدل‌هایی برای این فرمت‌ها است.

اگر ناچارید از JFIF برای یک طرح خطی یا نقاشی استفاده کنید، باید گزینه‌های -quality و -smooth در pnmtojpeg را برای رسیدن به تبدیلی رضایت‌بخش بیازمایید. معمولاً مقدار -smooth 10 یا حول‌وحوش آن کمک‌کننده است.

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

استفاده از گزینه -optimize در pnmtojpeg هنگام ساخت نسخه «نهایی» برای انتشار یا بایگانی ارزش دارد. همچنین هنگام استفاده از تنظیمات کیفیت پایین برای ایجاد فایل‌های JFIF بسیار کوچک یک مزیت محسوب می‌شود؛ میزان بهبود درصدی اغلب بسیار بیشتر از فایل‌های بزرگتر است. (در حال حاضر، حالت -optimize هنگام تولید فایل‌های تدریجی JPEG به صورت خودکار فعال است).

می‌توانید تبدیلات چرخش و بازتاب (قرینه‌سازی) را با برنامه jpegtran که همراه با کتابخانه JPEG گروه مستقل Jpeg ارائه می‌شود، بدون اتلاف کیفیت انجام دهید. برنامه jpegtran از دانش عمیق خود درباره نحوه عملکرد JPEG استفاده می‌کند تا تبدیل را بدون نیاز به باز کردن کامل فشردگی تصویر انجام دهد.

برنامه دیگر، cjpeg ، مشابه است. برنامه cjpeg توسط گروه مستقل JPEG نگهداری می‌شود و همراه با همان کتابخانه JPEG ارائه شده است که pnmtojpeg برای تمام کارهای JPEG خود از آن استفاده می‌کند. به همین دلیل، می‌توانید انتظار داشته باشید که از ویژگی‌های به‌روزتر JPEG بهره ببرد. همچنین از آنجا که برای اجرای pnmtojpeg باید کتابخانه را داشته باشید اما برعکس آن صادق نیست، برنامه cjpeg ممکن است به صورت عمومی‌تری در دسترس باشد.

از سوی دیگر، cjpeg برخلاف تمام ابزارهای NetPBM مانند pnmtojpeg ، از کتابخانه‌های NetPBM برای پردازش ورودی خود استفاده نمی‌کند. این بدان معناست که احتمال سازگاری کمتری با تمام برنامه‌های دیگری دارد که با فرمت‌های NetPBM کار می‌کنند. همچنین ساختار دستورات pnmtojpeg برخلاف cjpeg ، با سایر ابزارهای Netpbm کاملاً یکپارچه و هماهنگ است.

از گزینه -scan برای تعیین اسکریپت پویش استفاده کنید. یا از گزینه -progressive برای مشخص کردن یک اسکریپت پویش داخلی خاص بهره ببرید.

ماهیت دقیق اسکریپت پویش و فرمت پایه‌ای فایل آن در فایل wizard.doc که همراه کتابخانه JPEG گروه مستقل JPEG عرضه می‌شود، توضیح داده شده است. اسکریپت‌های پویش در pnmtojpeg دقیقاً مشابه cjpeg هستند.

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

نخست، محدودیت‌های متعددی در مورد یک اسکریپت پویش معتبر وجود دارد. کتابخانه JPEG و به تبع آن pnmtojpeg ، هرگونه عدم انطباق با این محدودیت‌ها را به دقت بررسی می‌کنند، اما اطلاعات کمی درباره نحوه عدم انطباق اسکریپت ارائه می‌دهند. پیام‌ها بسیار کلی و گاهی نادرست هستند.

برای شروع، ورودی‌های مربوط به ضریب DC باید قبل از هرگونه ورودی برای ضرایب AC قرار گیرند. ضریب DC همان ضریب 0 است و تمام ضرایب دیگر، ضرایب AC هستند. بنابراین در ورودی مربوط به ضریب DC، دو عدد پس از دو نقطه باید 0 و 0 باشند. در ورودی مربوط به ضرایب AC، عدد اول پس از دو نقطه نباید 0 باشد.

در یک ورودی DC، مولفه‌های رنگی باید به ترتیب صعودی باشند. برای مثال، عبارت «0,2,1» قبل از دو نقطه اشتباه است. عبارت «0,0,0» نیز نادرست است.

در یک ورودی برای ضریب AC، فقط باید یک مولفه رنگی را مشخص کنید؛ یعنی فقط یک عدد می‌تواند قبل از دو نقطه وجود داشته باشد.

در اولین ورودی برای یک ضریب مشخص از یک مولفه رنگی مشخص، مقدار «Ah» باید صفر باشد، اما مقدار Al می‌تواند هر شماره بیت معتبری باشد. در ورودی‌های بعدی، Ah باید برابر با مقدار Al از ورودی قبلی (برای همان ضریب و همان مولفه رنگی) باشد و مقدار Al باید یک واحد کمتر از مقدار Ah باشد.

اسکریپت در نهایت باید حداقل بخشی از ضریب DC را برای تمام مولفه‌های رنگی مشخص کند. در غیر این صورت، پیام خطای «Script does not transmit all the data» را دریافت خواهید کرد. نیازی به تعیین تمام بیت‌های ضریب DC یا هیچ‌کدام از ضرایب AC نیست.

در زمان ساخت کتابخانه JPEG یک گزینه استاندارد برای حذف قابلیت اسکریپت پویش وجود دارد. اگر کتابخانه شما به هر دلیلی با این گزینه کامپایل شده باشد، پیام خطای «Requested feature was omitted at compile time» را دریافت خواهید کرد.

در صورت تنظیم این متغیر محیطی، مقدار آن به عنوان سقف حافظه پیش‌فرض در نظر گرفته می‌شود. مقدار آن همان‌طور که برای گزینه -maxmemory توضیح داده شد تعیین می‌شود. تعیین صریح گزینه -maxmemory بر هر مقداری در JPEGMEM اولویت دارد.

jpegtopnm(1), pnm(1), صفحه راهنمای cjpeg, صفحه راهنمای djpeg, صفحه راهنمای jpegtran, صفحه راهنمای rdjpgcom, صفحه راهنمای wrjpgcom

Wallace, Gregory K. "The JPEG Still Picture Compression Standard", Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.

دستور pnmtojpeg و این دفترچه راهنما تا حد زیادی از برنامه cjpeg اثر گروه مستقل JPEG اقتباس شده‌اند. سایر بخش‌های برنامه توسط Bryan Henderson در تاریخ 7 مارس 2000 توسعه یافته است.

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

http://netpbm.sourceforge.net/doc/pnmtojpeg.html
23 April 2007 netpbm documentation