Pamflip User Manual(0) Pamflip User Manual(0)

pamflip - وارون‌سازی یا چرخاندن یک تصویر PAM یا PNM

pamflip { -leftright | -lr | -topbottom | -tb | -transpose | -xy | -reflect | -rotate90 | -r90 | -cw | -rotate270 | -r270 | -ccw | -rotate180 | -r180 | -null | -xform=xform1,xform2... } [-inverse] [-memsize=mebibytes] [-pagesize=bytes] [pamfile]

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

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

دستور pamflip یک تصویر PAM یا PNM را به صورت بالا به پایین یا چپ به راست وارون (flip) می‌کند، یا جای افقی و عمودی آن را ترانهاده (transpose) می‌سازد، یا آن را به اندازه ۱، ۲ یا ۳ ربع‌دایره (زاویه‌های ۹۰، ۱۸۰ یا ۲۷۰ درجه) می‌چرخاند.

برای چرخاندن در زاویه‌های دیگر، از pnmrotate استفاده کنید؛ هرچند سرعت آن بسیار کمتر است.

تصویر ورودی pamfile است، یا اگر pamfile مشخص نشده باشد، ورودی استاندارد (Standard Input) در نظر گرفته می‌شود.

برای وارون‌سازی یا چرخاندن بدون افت کیفیت یک تصویر JFIF (JPEG)، از jpegtran استفاده کنید. ابزار jpegtran بخشی از بستهٔ کتابخانهٔ فشرده‌سازی Independent Jpeg Group است و بخشی از Netpbm نیست. روش معمول Netpbm برای وارون‌سازی یک فایل JFIF این است که آن را به PNM تبدیل کرده، از pamflip استفاده شود و سپس دوباره به JFIF تبدیل گردد. اما از آن‌جا که فشرده‌سازی JPEG دارای اتلاف (lossy) است، تصویر حاصل کیفیتی کمتر از تصویر اصلی خواهد داشت. از سوی دیگر، jpegtran می‌تواند این تبدیل به‌خصوص را مستقیماً و بدون افت کیفیت روی داده‌های فشرده‌شده انجام دهد.

می‌توانید با استفاده از pamdice و pamundice در کنار pamflip، یک تصویر را به صورت قطعه‌قطعه وارون کنید. این کار ممکن است برای بهبود پردازش موازی یا بهینه‌سازی مصرف منابع مفید باشد. قابلیت تصویر شاخص (index image) در pamdice و pamundice به‌ویژه در این کار سودمند است، زیرا می‌توانید pamflip را روی تصویر شاخص اعمال کنید. یک مثال از وارون‌سازی تکه‌تکه‌ای یک تصویر با استفاده از تصویر شاخص، در راهنمای pamundice آورده شده است.

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

باید دقیقاً یکی از گزینه‌های زیر را مشخص کنید:

پیش‌درآمد pamflip (پیش از Netpbm 10.7 - اوت ۲۰۰۲)، یعنی pnmflip، فاقد گزینهٔ -xform بود و در عوض به شما اجازه می‌داد هر تعداد از گزینه‌های دیگر، از جمله صفر مورد را مشخص کنید. این ابزار تمام تبدیل‌های указаن‌شده را دقیقاً همانند گزینهٔ -xform در pamflip به همان ترتیب ارائه‌شده اعمال می‌کرد. (دلیل این تغییر: این شیوه از تفسیر گزینه‌ها با بقیهٔ ابزارهای Netpbm و بیشتر دنیای Unix ناسازگار بود و در نتیجه فهم و پیاده‌سازی آن را دشوار می‌نمود).

معکوس کردن چپ با راست (آینه‌ای افقی).
معکوس کردن بالا با پایین (وارونه عمودی).
ترانهادن سطرها با ستون‌ها؛ یعنی پیکسلی که در سطر X و ستون Y قرار دارد به سطر Y و ستون X منتقل می‌شود. (توجه داشته باشید که این‌ها مختصات دکارتی X و Y نیستند؛ مختصات دکارتی Y با حرکت به سمت بالا افزایش می‌یابد، در حالی که شماره‌های سطر با حرکت به سمت پایین افزایش پیدا می‌کنند).
بازتاب تصویر نسبت به (چرخش آن حول) یک خط مورب با شیب صعودی به سمت راست. این گزینه مکمل -transpose است که در عمل تصویر را نسبت به خطی با شیب نزولی به سمت راست بازتاب می‌دهد. این گزینه در Netpbm 11.11 (ژوئن ۲۰۲۵) اضافه شد. پیش از آن، می‌توانید از -xform برای دستیابی به این تبدیل استفاده کنید.
چرخش ۹۰ درجه در جهت پادساعت‌گرد (خلاف جهت عقربه‌های ساعت).
چرخش ۱۸۰ درجه.
چرخش ۲۷۰ درجه در جهت پادساعت‌گرد (۹۰ درجه در جهت عقربه‌های ساعت).
بدون تغییر. (هدف از این گزینه راحتی برنامه‌هایی است که پس از محاسبهٔ نوع تبدیل مورد نظر، از جمله در صورت عدم نیاز به هیچ تبدیلی، pamflip را فراخوانی می‌کنند).

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

اعمال تمام تبدیل‌های فهرست‌شده، به ترتیب. مقادیر معتبر برای تبدیل‌ها به شرح زیر هستند و معنایی مشابه با گزینه‌های هم‌نام فوق دارند.
  • leftright
  • topbottom
  • transpose

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

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

این گزینه در Netpbm 11.11 (ژوئن ۲۰۲۵) اضافه شد.

گزینه‌های زیر به pamflip کمک می‌کنند تا از حافظه به طور بهینه استفاده کند. برخی عملیات‌های برگرداندن روی تصاویر بسیار بزرگ می‌تواند باعث شود pamflip مجموعه کاری (working set) بسیار بزرگی داشته باشد؛ به این معنی که اگر حافظهٔ واقعی کافی نداشته باشید، برنامه ممکن است دچار کوبش صفحه (page thrashing) شود، که این موضوع به معنای طول کشیدن زمان اجرای برنامه به اندازه‌ای غیرمعقول است. اگر تمام تصویر شما در حافظهٔ واقعی جا شود، مشکلی نخواهید داشت. اگر صرفاً بالا با پایین یا چپ با راست را برمی‌گردانید، مشکلی نخواهید داشت. در غیر این صورت، دقت کنید. اگر به جزئیات مسئلهٔ کوبش حافظه و نحوهٔ برخورد pamflip با آن علاقه‌مندید، دعوت می‌شوید توضیحات کامل را در کامنت‌های موجود در کد منبع بخوانید.

mebibytes اندازهٔ حافظهٔ در دسترس برای pamflip بر حسب مبی‌بایت (یا همان مگابایت) است. این مقدار برابر با کمترین میزان حافظهٔ واقعی یا مجازی در دسترس است.

pamflip کار خاصی برای تخصیص حافظهٔ واقعی یا کنترل تخصیص آن انجام نمی‌دهد — بلکه صرفاً با ارجاع به حافظهٔ مجازی به طور عادی، هر چقدر حافظه که به آن برسد دریافت می‌کند. مقدار حافظهٔ واقعی مورد بحث، حداکثر مقداری است که انتظار می‌رود pamflip با انجام این کار در نهایت به دست آورد. دانستن این مقدار برای شما البته تقریباً غیرممکن است، اما می‌توانید آن را تخمین بزنید. کل حافظهٔ واقعی در سیستم شما باید عاملی اساسی در تخمین‌تان باشد.

اگر pamflip نتواند کل تصویر را در مقدار حافظهٔ تعیین‌شده جا دهد، تبدیل را به صورت تکه‌تکه انجام داده و برای نتایج میانی از فایل‌های موقت استفاده می‌کند.

در تبدیل‌های کاملاً افقی (چپ برای راست) یا تبدیل خنثی، pamflip هرگز بیش از یک سطر را در حافظه نگه نمی‌دارد؛ بنابراین اندازهٔ حافظه بی‌اهمیت است و pamflip از فایل‌های موقت استفاده نمی‌کند.

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

حافظهٔ واقعی زمانی اهمیت پیدا می‌کند که شما تبدیلی از نوع ستون برای سطر انجام دهید (مانند -rotate90). در این حالت، حتی اگر pamflip بتواند کل تصویر را به یک‌باره در حافظهٔ مجازی جا دهد، اگر تصویر در حافظهٔ واقعی نیز جا نشود، برنامه به دلیل ترتیب دسترسی pamflip به پیکسل‌ها به شدت دچار کوبش خواهد شد؛ و این یعنی اجرای آن مدت زمان فوق‌العاده زیادی طول خواهد کشید. یک مقدار مناسب برای -memsize، تبادل صفحات (paging) را به طور چشمگیری کاهش می‌دهد.

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

اگر -memsize را بیش از حد کوچک مشخص کنید، برنامه به دلیل سربار اضافی حاصل از مدیریت فایل‌های موقت، کمی کندتر اجرا خواهد شد. همچنین، اگر محیط شما طوری تنظیم نشده باشد که امکان ایجاد فایل‌های موقت وجود داشته باشد، pamflip ناموفق خواهد بود.

انجام کل تبدیل «درون حافظه» به آن اندازه‌ای که ممکن است فکر کنید سرعت کار را بالا نمی‌برد؛ زیرا حتی با وجود فایل‌های موقت، داده‌ها به همان اندازه ممکن است در حافظه وجود داشته باشند. حافظهٔ مجازی روی دیسک صفحه‌بندی می‌شود و فایل‌های دیسک در حافظه کش می‌شوند. در واقع، زمانی که پیکسل‌ها در یک فایل موقت ذخیره می‌شوند، به دلیل اینکه pamflip از فرمت بهینه‌تری استفاده می‌کند، نسبت به ذخیرهٔ «درون حافظه» بسیار فشرده‌تر در حافظه جا می‌گیرند. بنابراین با دادن حافظهٔ کمتر به pamflip، احتمالاً ورودی/خروجی (I/O) دیسک کمتری خواهید داشت.

اگر -memsize را مشخص نکنید، pamflip مقدار بی‌نهایت را پیش‌فرض قرار می‌دهد.

این گزینه پیش از نسخهٔ 10.7 بستهٔ Netpbm (اوت ۲۰۰۲) وجود نداشت.

پیش از نسخهٔ 10.42 بستهٔ Netpbm (مارس ۲۰۰۸)، این گزینه فقط برای حافظهٔ واقعی اعمال می‌شد. pamflip همواره کل تصویر را در حافظهٔ مجازی نگه می‌داشت و اگر نمی‌توانست حافظهٔ مجازی کافی به دست آورد، با شکست مواجه می‌شد. pamflip با ترتیبی به پیکسل‌ها دسترسی می‌یافت که مصرف حافظهٔ واقعی را درون مقدار مشخص‌شده نگه دارد.

bytes اندازهٔ یک واحد صفحه‌بندی (paging unit) در سیستم شما بر حسب بایت است — یعنی مقدار حافظه‌ای که به عنوان یک واحد تفکیک‌ناپذیر به حافظه وارد یا از آن خارج می‌شود. پیش‌فرض 4KiB است.

این گزینه هیچ تأثیری ندارد.

پیش از نسخهٔ 10.42 بستهٔ Netpbm (مارس ۲۰۰۸)، pamflip از آن برای کنترل میزان استفاده از حافظهٔ واقعی بهره می‌برد.

این گزینه پیش از نسخهٔ 10.7 بستهٔ Netpbm (اوت ۲۰۰۲) وجود نداشت.

این گزینه باعث می‌شود pamflip پیام‌هایی را درباره روند پیشرفت خود به خطای استاندارد (Standard Error) ارسال کند.

pnmrotate(1)، pamdice(1)، pamundice(1)، pnm(1)، pam(1)، راهنمای jpegtran

ابزار pamflip در Netpbm 10.13 (دسامبر ۲۰۰۲) جایگزین pnmflip شد. pamflip با نسخه‌های پیشین سازگار است، اما بر روی تصاویر PAM نیز کار می‌کند.

حق نشر (C) ۱۹۸۹ متعلق به Jef Poskanzer.

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

http://netpbm.sourceforge.net/doc/pamflip.html
02 June 2025 netpbm documentation