Pstopnm User Manual(0) Pstopnm User Manual(0)

pstopnm - تبدیل فایل PostScript به تصویر PNM

pstopnm

[-stdout]

[-forceplain]

[-help]

[-dpi=dpi]

[-xsize=pixels] [-ysize=pixels]

[-xborder=frac] [-yborder=frac] [-landscape]

[-portrait]

[-nocrop]

[-pbm

|-pgm

|-ppm]

[-llx=s] [-lly=s] [-urx=s] [-ury=s]

[-verbose]

[-xmax=pixels] [-ymax=pixels]

[-textalphabits={1,2,4}]

psfile[.ps]

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

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

pstopnm یک فایل PostScript یا PDF را به عنوان ورودی می‌خواند و تصاویر PBM، PGM یا PPM را به عنوان خروجی تولید می‌کند. این برنامه صرفاً از GhostScript برای رندر کردن فایل PostScript با گرداننده‌های دستگاه PNM آن استفاده می‌کند. اگر GhostScript نصب نباشد یا نسخه‌ای که نصب کرده‌اید با گرداننده‌های دستگاه مربوط به PNM ساخته نشده باشد، pstopnm با خطا مواجه خواهد شد. با اجرای دستور gs --help می‌توانید بررسی کنید که آیا محیط مناسب را در اختیار دارید یا خیر. اگر خروجی داد و در بخش «Available Devices» مواردی همچون pbm، pbmraw، pgm، pgmraw، pnm، pnmraw، ppm، یا ppmraw فهرست شده بودند، همه‌چیز آماده است.

باید توجه داشت که pstopnm تنها در عام‌ترین معنای کلمه یک مبدل قالب فایل تصویری Netpbm است، زیرا Postscript بسیار دور از یک قالب فایل تصویری است. آنچه pstopnm واقعاً انجام می‌دهد، یک رندرکننده Postscript — یعنی یک تولیدکننده تصویر — است. یک نمونه از تفاوت را زمانی خواهید دید که انتظار دارید pstopnm | pnmtops یک تبدیل همانی (idempotent) باشد (که در عمل این‌گونه نیست). جزئیات مربوط به این نوع تبدیل در ادامه آمده است.

pstopnm از مقدار متغیر محیطی GHOSTSCRIPT به عنوان نام فایل برنامه Ghostscript استفاده می‌کند. اگر GHOSTSCRIPT تنظیم نشده باشد، pstopnm متغیر PATH شما را به دنبال یک فایل معمولی با نام gs جستجو می‌کند. اگر آن را پیدا نکند، فرض را بر این می‌گذارد که Ghostscript در فایل /usr/bin/gs قرار دارد.

pstopnm برای تولید فایل‌های خروجی از کتابخانه‌های Netpbm استفاده نمی‌کند، بنابراین ممکن است با اکثر برنامه‌های Netpbm کاملاً سازگار و یکدست نباشد.

psfile[.ps] نام فایل ورودی است. اگر فایلی با نام دقیق مشخص‌شده وجود نداشته باشد اما فایلی با افزودن .ps به انتهای آن موجود باشد، pstopnm پسوند ps را اضافه خواهد کرد. برای ورودی استاندارد، از - استفاده کنید یا به سادگی هیچ آرگومانی مشخص نکنید.

اگر از گزینه -stdout استفاده کنید یا ورودی شما از ورودی استاندارد باشد، pstopnm تصاویر تمام صفحات را در قالب یک فایل چندتصویری به خروجی استاندارد ارسال می‌کند. در غیر این صورت، pstopnm برای هر صفحه در ورودی Postscript یک فایل ایجاد می‌کند. نام‌گذاری فایل‌ها به این صورت است: اگر نام فایل ورودی psfile.ps باشد، نام فایل‌ها psfile001.ppm، psfile002.ppm و غیره خواهد بود. پسوند نوع فایل بسته به نوع خروجی که با گزینه‌های فراخوانی انتخاب می‌کنید، .ppm، .pgm یا .pbm است. اگر نام فایل ورودی به .ps ختم نشود، کل نام فایل در نام فایل خروجی استفاده می‌شود. به عنوان مثال، اگر نام فایل ورودی psfile.old باشد، نام فایل خروجی psfile.old001.ppm و غیره خواهد بود.

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

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

توجه داشته باشید که می‌توانید هر دو نوع فایل — یعنی EPSF پیوسته و غیر EPSF چندصفحه‌ای — را با pnmtops و با تعیین گزینه -setpage ایجاد کنید.

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

گزارش شده است که برای برخی از ورودی‌های Postscript نسخه ۱، Ghostscript و در نتیجه pstopnm هیچ خروجی تولید نمی‌کنند. برای رفع این مشکل می‌توانید فایل را با برنامه ps2ps به Postscript نسخه ۳ تبدیل کنید. گزارش شده است که برنامه pstops در این حالت کارایی ندارد.

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

توجه داشته باشید که یک تصویر خروجی به یک صفحه ورودی منفرد مرتبط است.

pstopnm کار خود را با برداشتن یک ناحیه مستطیلی از صفحه ورودی آغاز می‌کند. به این ناحیه «تصویر موضوع» (subject image) گفته می‌شود.

pstopnm ممکن است به تصویر موضوع حاشیه‌هایی اضافه کند تا آنچه را «تصویر موضوع حاشیه‌دار» (bordered subject image) نامیده می‌شود، تشکیل دهد.

pstopnm تصویر موضوع حاشیه‌دار را در مرکز تصویر خروجی قرار می‌دهد و لبه‌ها را بر حسب نیاز برش می‌دهد تا در اندازه محاسبه‌شده تصویر خروجی جا بگیرد.

مکان تصویر موضوع در صفحه ورودی Postscript با چهار عدد مشخص می‌شود: مختصات x و y گوشه پایین-چپ و گوشه بالا-راست. این مختصات معمولاً توسط عبارت BoundingBox DSC (یک کامنت در Postscript) در فایل PostScript مشخص می‌شوند، اما کاربر می‌تواند با تعیین یک یا چند مورد از گزینه‌های زیر آن‌ها را جایگزین کند: -llx، -lly، -urx و -ury.

وجود و ضخامت حاشیه‌ای که قرار است برای تشکیل تصویر موضوع حاشیه‌دار به تصویر موضوع اضافه شود، توسط گزینه‌های -xborder و -yborder کنترل می‌شود. اگر pstopnm عبارت BoundingBox را در ورودی نیابد و شما نیز مختصات ناحیه تصویر را در خط فرمان مشخص نکرده باشید، pstopnm از مقادیر پیش‌فرض استفاده می‌کند. اگر ورودی شما از ورودی استاندارد (Standard Input) باشد، pstopnm از مقادیر BoundingBox استفاده نخواهد کرد (به دلیل دشواری فنی استخراج آن اطلاعات هم‌زمان با ارسال جریان فایل به Ghostscript)؛ بنابراین یا باید مختصات ناحیه تصویر را مشخص کنید یا مقدار پیش‌فرض را بپذیرید.

اندازه تصویر خروجی موضوعی گیج‌کننده است. در یک فایل Postscript، اشیاء دارای ابعاد فضایی و فیزیکی هستند. برای نمونه، ممکن است طول یک خط مشخص ۳ سانتی‌متر باشد. یک چاپگر Postscript موظف است آن خط را فارغ از اینکه به چند پیکسل نیاز دارد و بدون در نظر گرفتن ابعاد برگه کاغذی که روی آن چاپ می‌کند، به طول ۳ سانتی‌متر چاپ کند. در مقابل، در یک تصویر PNM هیچ بعد فضایی وجود ندارد؛ تنها پیکسل‌ها هستند. ممکن است خطی به طول ۱۰۰ پیکسل داشته باشید، اما تصویر PNM هیچ چیزی درباره اینکه طول آن خط روی یک صفحه چاپ‌شده چقدر باید باشد، بیان نمی‌کند.

pstopnm نقش یک چاپگر Postscript را ایفا می‌کند. تصویر PNM یک صفحه چاپی مجازی است. pstopnm باید تعیین کند که در تصویر خروجی برای نشان دادن هر اینچ از تصویر ورودی، از چند پیکسل استفاده خواهد کرد؛ این مقدار همان «تفکیک‌پذیری دستگاه خروجی» (output device resolution) است. آن را مانند تعداد نقاط در هر اینچ (DPI) در نظر بگیرید که چاپگر مجازی روی صفحه مجازی چاپ می‌کند.

ساده‌ترین کار این است که با استفاده از گزینه -dpi، دقیقاً به pstopnm بگویید از چه تفکیک‌پذیری‌ای برای دستگاه خروجی استفاده کند. اگر برای مثال مقدار -dpi=300 را تعیین کنید و تصویر موضوع حاشیه‌دار ۲ اینچ در ۳ اینچ باشد، خروجی PNM برابر با ۶۰۰ پیکسل در ۹۰۰ پیکسل خواهد بود. با استفاده از این روش، تفکیک‌پذیری دستگاه خروجی در هر دو جهت یکسان خواهد بود.

همچنین می‌توانید ابعاد تصویر خروجی را با گزینه‌های -xsize و -ysize تعیین کنید. برای نمونه، اگر مشخص کنید -xsize=1200 -ysize=1800 و ابعاد تصویر موضوع حاشیه‌دار دارای پهنای ۲ اینچ و ارتفاع ۳ اینچ باشد، تصویر خروجی ۱۲۰۰ در ۱۸۰۰ پیکسل خواهد بود که در آن هر پیکسل نشان‌دهنده ۱/۶۰۰ اینچ از تصویر ورودی است.

در حالت نادری که بخواهید تفکیک‌پذیری دستگاه خروجی در دو جهت متفاوت باشد، می‌توانید از -xsize و -ysize برای این کار استفاده کنید. در مثال بالا، اگر -ysize را به ۹۰۰ تغییر دهید، یک پیکسل در راستای افقی همچنان ۱/۶۰۰ اینچ را نمایش می‌دهد، اما در راستای عمودی نشان‌دهنده ۱/۳۰۰ اینچ خواهد بود.

اگر یکی از گزینه‌های -xsize یا -ysize را مشخص کرده و دیگری را تعیین نکنید، pstopnm مقدار دیگری را به‌طور پیش‌فرض به‌گونه‌ای در نظر می‌گیرد که تفکیک‌پذیری دستگاه خروجی در هر دو جهت یکسان باشد.

بخش‌های «x» و «y» در -xsize و -ysize به تصویری اشاره دارند که روی صفحه چاپ می‌شود، نه خود صفحه. بنابراین اگر pstopnm آن را در جهت افقی (landscape) چاپ کند، «x» به جهت عمودی روی صفحه مربوط خواهد بود، یعنی جهت عمودی در تصویر PNM خروجی.

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

اگر گزینه -nocrop را مشخص کنید، pstopnm از مقادیر -xmax و -ymax برای ابعاد تصویر خروجی استفاده می‌کند. مقادیر پیش‌فرض آن‌ها به ترتیب ۶۱۲ و ۷۹۲ پیکسل است.

حالت نهایی که حالت پیش‌فرض است، زمانی رخ می‌دهد که هیچ‌یک از گزینه‌های اندازه یا تفکیک‌پذیری و نیز -nocrop را مشخص نکنید. این پیچیده‌ترین حالت است. در این وضعیت، pstopnm ابتدا تفکیک‌پذیری‌ای برای دستگاه خروجی برمی‌گزیند که بتواند از تصویر موضوع حاشیه‌دار، تعداد پیکسل‌های مشخص‌شده با -xmax و -ymax را تولید کند. سپس بر اساس آن تفکیک‌پذیری، اندازه تصویری برای خروجی انتخاب می‌کند که فقط به اندازه‌ای بزرگ باشد که تصویر موضوع (بدون حاشیه‌ها) را در خود جای دهد. به یاد داشته باشید (همان‌طور که در بالا گفته شد) که pstopnm لبه‌های تصویر موضوع حاشیه‌دار را برش می‌دهد تا در اندازه تصویر خروجی محاسبه‌شده جا بگیرد.

آزمایش‌های انجام‌شده در سال ۲۰۱۳ با Ghostscript نسخه 8.71 نشان می‌دهند که درایور خروجی pgmraw در Ghostscript دارای نوعی خطای گرد کردن است که باعث تغییر جزئی مقادیر پیکسل‌ها می‌شود؛ این یعنی وقتی ورودی Postscript تک‌رنگ داشته باشید، pstopnm خروجی نادرستی تولید می‌کند. اما با ورودی Postscript رنگی، pstopnm از درایور خروجی ppmraw در Ghostscript استفاده کرده و خروجی PPM درستی تولید می‌نماید.

توصیه‌های مفیدی درباره تبدیل به Postscript و از آن، در سند Postcript File Conversions (1) به قلم Andrew T. Young آمده است.

تبدیل برگشت‌پذیر (Reversible Conversion)

اگر قصد دارید معادل خط لوله ابتدایی pnmtops | pstopnm را انجام دهید، مراحل زیر این تبدیل را انجام خواهند داد.


    $ pnmtops -nocenter -equalpixels -dpi 72 -noturn testimg.ppm > testimg.ps
    $ pstopnm -xborder=0 -yborder=0 -xsize=XSIZE -ysize=YSIZE \
        -portrait -stdout -quiet testimg.ps >testimg2.ppm

مقادیر XSIZE و YSIZE در بالا، ابعاد تصویر هستند که می‌توانید مانند مثال زیر آن‌ها را از testimg.ps استخراج کنید (دستورهای grep، awk و echo صرفاً برای نمایش نحوه کارکرد سایر دستورها هستند—شما در یک برنامه کاربردی از آن‌ها به این شکل استفاده نخواهید کرد).


    $ grep "BoundingBox" testimg.ps
    %%BoundingBox: 0 0 227 149
    $ awk  '/%%BoundingBox/ {print $4,$5}' testimg.ps
     227 149
 
    $ xysize=$(awk  '/%%BoundingBox/ {print "-xsize="$4,"-ysize="$5}' testimg.ps)
    $ echo $xysize
     -xsize=227 -ysize=149
    $ pstopnm -xborder=0 -yborder=0 $xysize -portrait ... testimg.ps

توجه داشته باشید که ایرادات و باگ‌های Ghostscript ممکن است مانع از انجام یک تبدیل برگشت‌پذیر کامل و بی‌نقص شوند.

قالب PDF زیرمجموعه‌ای از Postscript است، بنابراین pstopnm می‌تواند از PDF به قالب Netpbm تبدیل کند، اما اغلب به دلیل وابستگی pstopnm به عبارت BoundingBox DSC (که در ساختار PDF وجود ندارد)، تصویری با اندازه نادرست تولید می‌کند. در مورد PDFهای متنی محض، این تبدیل به‌خوبی کار می‌کند. در موارد دیگر، می‌توانید با تبدیل فایل به Postscript عمومی با استفاده از برنامه pdf2ps که همراه با Ghostscript ارائه می‌شود، نتایج بهتری کسب کنید. برای دریافت اطلاعات بیشتر درباره تبدیل به PDF و از آن، به Document/Graphics Software مراجعه کنید.

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

فایل خروجی را مجبور می‌کند که در قالب ساده (متنی یا plain) باشد. در غیر این صورت، در قالب خام (دودویی یا binary) خواهد بود. ببینید pbm(1) و غیره. اگر به خروجی با قالب متنی نیاز دارید، به جای گزینهٔ مشترک -plain از این گزینه استفاده کنید.
مقدار bx را به عنوان مختصات x گوشهٔ پایین چپ (بر حسب اینچ) روی صفحهٔ ورودی Postscript تصویر مورد نظر تعیین می‌کند. بخش ابعاد (Dimensions) را ببینید.
مقدار by را به عنوان مختصات y گوشهٔ پایین چپ (بر حسب اینچ) روی صفحهٔ ورودی Postscript تصویر مورد نظر تعیین می‌کند. بخش ابعاد (Dimensions) را ببینید.
تصویر را در جهت افقی (landscape) رندر می‌کند.

اگر هیچ‌یک از گزینه‌های -portrait و -landscape را مشخص نکنید، pstopnm جهتی را انتخاب می‌کند که تصویر به بهترین شکل در صفحهٔ خروجی جا بگیرد.

افقی (Landscape) به معنای چاپ به صورت عرضی روی صفحه است، نه در امتداد لبهٔ طولی. اگر لبهٔ طویل صفحه در بالا قرار داشته باشد، این دو مورد با هم متفاوت خواهند بود.

تصویر را در جهت عمودی (portrait) رندر می‌کند.

گزینهٔ -landscape را ببینید.

این گزینه باعث می‌شود pstopnm ابعاد تصویر خروجی را دقیقاً برابر با ابعاد تصویر اصلیِ حاشیه‌دار قرار دهد. به طور پیش‌فرض، pstopnm ابعاد تصویر خروجی را طبق مقادیر تعیین‌شده توسط -xmax و -ymax تنظیم می‌کند. بخش ابعاد (Dimensions) را ببینید.
قالب فایل خروجی را انتخاب می‌کند. به طور پیش‌فرض، تمام فایل‌ها به صورت PPM رندر می‌شوند.
باعث می‌شود خروجی به جای ارسال به فایل‌های معمولی (یک فایل به ازای هر صفحه؛ توضیحات فایل‌های خروجی در بالا را ببینید)، به خروجی استاندارد (Standard Output) فرستاده شود. برای استخراج صفحات جداگانه از خروجی استاندارد، از pnmsplit استفاده کنید.
مقدار tx را به عنوان مختصات x گوشهٔ بالا راست (بر حسب اینچ) روی صفحهٔ ورودی Postscript تصویر مورد نظر تعیین می‌کند. بخش ابعاد (Dimensions) را ببینید.
مقدار ty را به عنوان مختصات y گوشهٔ بالا راست (بر حسب اینچ) روی صفحهٔ ورودی Postscript تصویر مورد نظر تعیین می‌کند. بخش ابعاد (Dimensions) را ببینید.
اطلاعات پردازش را در stdout چاپ می‌کند.
مشخص می‌کند که حاشیه‌های چپ و راست اضافه شده به تصویر مورد نظر، frac برابر عرض تصویر باشند. مقدار پیش‌فرض 0.1 است. بخش ابعاد (Dimensions) را ببینید.
مشخص می‌کند که عرض تصویر خروجی برابر xmax پیکسل باشد. مقدار پیش‌فرض 612 است. بخش ابعاد (Dimensions) را ببینید.
مشخص می‌کند که عرض تصویر خروجی برابر xsize پیکسل باشد. بخش ابعاد (Dimensions) را ببینید.
مشخص می‌کند که حاشیه‌های بالا و پایین اضافه شده به تصویر مورد نظر، frac برابر ارتفاع تصویر باشند. مقدار پیش‌فرض 0.1 است. بخش ابعاد (Dimensions) را ببینید.
مشخص می‌کند که ارتفاع تصویر خروجی برابر ymax پیکسل باشد. مقدار پیش‌فرض 792 است. بخش ابعاد (Dimensions) را ببینید.
مشخص می‌کند که ارتفاع تصویر خروجی برابر ysize پیکسل باشد. بخش ابعاد (Dimensions) را ببینید.
وضوح دستگاه خروجی را بر حسب نقطه در اینچ (dpi) برای چاپگر Postscript که pstopnm شبیه‌سازی می‌کند، مشخص می‌نماید. این مقدار برابر با تعداد پیکسل‌های PNM است که pstopnm برای هر اینچ از تصویر تولید می‌کند. بخش ابعاد (Dimensions) را ببینید.

این گزینه از Netpbm 10.21 (مارس ۲۰۰۴) اضافه شد.

هموارسازی زیرنمونه‌ای (subsample antialiasing) متن را کنترل می‌کند. تکنیک ضدپلگی (Antialiasing) روشی برای هموارسازی است که لبه‌های دندانه‌دار حروف را از بین می‌برد. هموارسازی زیرنمونه‌ای نوعی از ضدپلگی است که از زیرپیکسل‌ها در یک جعبه استفاده می‌کند، و مقدار این گزینه اندازهٔ آن جعبه است. مقدار 4 بهترین کیفیت خروجی را به همراه دارد، در حالی که 1 هیچ ضدپلگی اعمال نمی‌کند. اعداد کوچک‌تر باعث می‌شوند pnmtops زمان پردازنده (CPU) کمتری مصرف کند.

ابزار pstopnm برای این کار از پارامتر TextAlphaBits برنامهٔ Ghostscript استفاده می‌کند.

پیش‌فرض 4 است.

این گزینه از Netpbm 10.53 (دسامبر ۲۰۱۰) اضافه شد. نسخه‌های قدیمی‌تر pstopnm ضدپلگی انجام نمی‌دادند.

این برنامه با فایل‌های PostScript که ماتریس تبدیل فعلی (current transformation matrix) را مقداردهی اولیه می‌کنند، نتایج نادرستی تولید خواهد کرد. در این موارد، انتقال و چرخش صفحه هیچ تاثیری نخواهند داشت. برای رندر کردن این فایل‌ها، احتمالاً بهترین راه استفاده از گزینه‌های زیر است:

pstopnm -xborder 0 -yborder 0 -portrait -nocrop file.ps

اگر قرار باشد سند روی رسانه‌ای متفاوت از کاغذ اندازه letter رندر شود، ممکن است به گزینه‌های بیشتری نیاز باشد.

gs, pnmtops(1), psidtopgm(1), pbmtolps(1), pbmtoepsi(1), pnmsplit(1), pstofits

کپی‌رایت (c) 1992 متعلق به Smithsonian Astrophysical Observatory

PostScript علامت تجاری Adobe Systems Incorporated است.

Alberto Accomazzi, WIPL, Center for Astrophysics.

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

http://netpbm.sourceforge.net/doc/pstopnm.html
21 February 2024 netpbm documentation