Pnmrotate User Manual(0) Pnmrotate User Manual(0)

pnmrotate - چرخاندن یک تصویر PNM با زاویه‌ای مشخص

pnmrotate [-noantialias] [-background=color] angle [pnmfile]

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

pnmrotate یک تصویر PNM را به عنوان ورودی می‌خواند. آن را با زاویهٔ مشخص‌شده می‌چرخاند و همان نوع تصویر PNM را در خروجی تولید می‌کند.

ورودی فایلی با نام pnmfile است، یا اگر pnmfile را مشخص نکنید، ورودی استاندارد (Standard Input) خواهد بود. خروجی به خروجی استاندارد (Standard Output) فرستاده می‌شود.

تصویر حاصل یک مستطیل است که تصویر ورودی (مستطیلی) را که نسبت به لبهٔ پایینی خود چرخیده، در بر می‌گیرد. مستطیل دربرگیرنده تا حد امکان کوچک در نظر گرفته می‌شود تا تصویر چرخیده را در بر بگیرد. پس‌زمینهٔ تصویر دربرگیرنده تک‌رنگی است که pnmrotate آن را به عنوان رنگ پس‌زمینهٔ تصویر اصلی تشخیص می‌دهد، یا رنگی که شما به طور صریح مشخص می‌کنید.

مقدار angle به صورت درجهٔ اعشاری (ممیز شناور) است و در خلاف جهت عقربه‌های ساعت سنجیده می‌شود. این مقدار می‌تواند منفی باشد، اما باید بین -90 و 90 قرار گیرد.

برای چرخش‌هایی که مضربی از ۹۰ درجه (یک‌چهارم دور) هستند، بهتر است به جای آن از pamflip استفاده کنید؛ این ابزار سریع‌تر و دقیق‌تر است.

برای چرخش‌های بیشتر از ۴۵ درجه ممکن است به نتیجهٔ بهتری برسید اگر ابتدا با استفاده از pamflip یک چرخش ۹۰ درجه انجام دهید و سپس با pnmrotate کمتر از ۴۵ درجه در جهت معکوس بچرخانید.

الگوریتم چرخش بر اساس روش سه‌بُرشی (three-shear) اَلن پِث (Alan Paeth) است. هر بُرش با پیمایش پیکسل‌های مبدأ و توزیع مقادیر کسری به هر یک از پیکسل‌های مقصد پیاده‌سازی شده است. این روش دارای اثر «ضددندانه‌ای شدن» (anti-aliasing) است - یعنی از لبه‌های ناهموار و اعوجاج‌های مشابه جلوگیری می‌کند. با این حال، به این معنی نیز هست که رنگ‌های اصلی یا سطوح خاکستری در تصویر دستخوش تغییر می‌شوند. اگر نیاز دارید که دقیقاً همان مجموعه رنگ‌ها حفظ شوند، می‌توانید از گزینهٔ -noantialias استفاده کنید.

برنامه با گزینهٔ -noantialias سریع‌تر اجرا شده و حافظهٔ واقعی (real memory) کمتری مصرف می‌کند. در هر دو حالت، مقدار زیادی حافظهٔ مجازی (virtual memory) مصرف می‌شود، چرا که یک کپی از تصویر ورودی و یک کپی از تصویر خروجی را در حافظه نگه می‌دارد و برای هر کدام ۱۲ بایت به ازای هر پیکسل استفاده می‌کند. اما با فعال بودن -noantialias، این حافظه را به صورت متوالی در حدود شش گذر پیمایش می‌کند و در هر لحظه تنها چند صفحه از حافظهٔ فیزیکی نیاز خواهد بود.

در مقابل، بدون -noantialias، اندازهٔ مجموعه کاری (working set) برنامه در حافظهٔ واقعی یک صفحه به ازای هر ردیف تصویر ورودی به علاوه یک صفحه به ازای هر ردیف تصویر خروجی است. پیش از Netpbm نسخهٔ 10.16 (ژوئن ۲۰۰۳)، گزینهٔ -noantialias نیز دقیقاً به همین میزان حافظه نیاز داشت.

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

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

رنگ پس‌زمینه‌ای را تعیین می‌کند که تصویر چرخیده روی آن قرار می‌گیرد.

رنگ (color) را مطابق آنچه برای آرگومان روال کتابخانه‌ای pnm_parsecolor() شرح داده شده است، مشخص کنید.

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

این گزینه از Netpbm نسخهٔ 10.15 اضافه شد. پیش از آن، pnmrotate همواره رفتاری مشابه حالت پیش‌فرض کنونی داشت.

این گزینه pnmrotate را وادار می‌کند تا به سادگی پیکسل‌ها را جابه‌جا کند، به جای اینکه پیکسل‌های خروجی را از ترکیب چندین پیکسل ورودی بازتولید نماید. حالت دوم ممکن است باعث شود خروجی شامل رنگ‌هایی باشد که در ورودی وجود ندارند، که شاید مطلوب نباشد. همچنین احتمالاً باعث می‌شود خروجی شامل تعداد زیادی رنگ متفاوت شود. اگر به تعداد کمی رنگ نیاز دارید، اما اهمیتی ندارد که آیا دقیقاً همان رنگ‌های ورودی هستند یا خیر، استفاده از pnmquant روی تصویر خروجی را به جای استفاده از -noantialias مد نظر قرار دهید.

توجه داشته باشید برای اطمینان از اینکه خروجی شامل رنگ‌هایی که در ورودی نیستند نشود، باید رنگ پس‌زمینه را نیز مد نظر قرار دهید. گزینهٔ -background را ببینید.

"A Fast Algorithm for General Raster Rotation" by Alan Paeth, Graphics Interface '86, pp. 77-81.

pnmshear(1), pamflip(1), pnmquant(1), pnm(1)

حق نشر (C) ۱۹۸۹، ۱۹۹۱ توسط Jef Poskanzer.

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

http://netpbm.sourceforge.net/doc/pnmrotate.html
30 August 2002 netpbm documentation