Pnmcrop User Manual(0) Pnmcrop User Manual(0)

pnmcrop - برش کادر و حاشیه‌های یک تصویر Netpbm

pnmcrop

[-white |-black |-sides |-bg-color=color |-bg-corner={ topleft|topright|bottomleft|bottomright} ]

[-left]

[-right]

[-top]

[-bottom]

[-margin=pixels]

[-closeness=closeness_percent]

[-borderfile=filename]

[-blank-image={abort|pass|minimize|maxcrop}]

{[-reportfull]|[-reportsize]}

[-verbose]

[pnmfile]

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

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

برنامه pnmcrop یک تصویر PBM، PGM یا PPM را به عنوان ورودی خوانده، حاشیه‌هایی را که به رنگ پس‌زمینه هستند حذف می‌کند و همان نوع تصویر را در خروجی تولید می‌نماید.

اگر گزینه دیگری مشخص نکنید، pnmcrop فرض می‌کند که رنگ پس‌زمینه همان رنگ گوشه‌های بالا-چپ و بالا-راست تصویر است و اگر رنگ‌های متفاوتی داشته باشند، چیزی در میانه آن دو را در نظر می‌گیرد. می‌توانید با گزینه‌های -white و -black مشخص کنید که پس‌زمینه سفید یا سیاه است، یا با گزینه -sides کاری کنید که pnmcrop حدس خود را به جای دو گوشه، بر اساس هر چهار گوشه بنا نهد.

به‌طور پیش‌فرض، pnmcrop هر نواری از رنگ پس‌زمینه را که در هر چهار طرف پیدا کند برش می‌دهد. می‌توانید با استفاده از گزینه‌های -left، -right، -top و -bottom به pnmcrop بگویید که فقط حاشیه‌های خاصی را حذف کند.

اما توجه داشته باشید که تشخیص رنگ پس‌زمینه توسط pnmcrop مستقل از این است که کدام لبه‌ها را برش می‌دهید، که ممکن است خلاف شهود باشد. برای مثال، تصویری با حاشیه آبی در بالا و حاشیه سیاه در پایین را در نظر بگیرید و شما دستور برش پایین (-bottom) را بدهید. ممکن است انتظار داشته باشید حاشیه سیاه بریده شود، اما در واقع هیچ چیزی برش داده نخواهد شد، زیرا pnmcrop رنگ پس‌زمینه را همان رنگ دو گوشه بالا (که آبی است) فرض می‌کند و هیچ رنگ آبی در پایین تصویر وجود ندارد. اگر می‌خواهید pnmcrop رنگ پس‌زمینه را از لبه‌هایی که برش داده می‌شوند بگیرد، از -bg-corner استفاده کنید.

اگر می‌خواهید مقداری از حاشیه باقی بماند، از گزینه -margin استفاده کنید. این گزینه نه تنها بخشی از حاشیه را از برش مصون نگه می‌دارد، بلکه در صورت لزوم (با رنگی که pnmcrop پس‌زمینه می‌داند) پر می‌کند تا به آن اندازه برسد.

اگر ورودی یک جریان چندتصویری باشد، pnmcrop هر یک را به طور مستقل پردازش کرده و یک جریان چندتصویری به عنوان خروجی تولید می‌کند. این برنامه محل برش را به طور مستقل برای هر تصویر انتخاب می‌کند. بنابراین اگر با جریانی از تصاویر با ابعاد یکسان شروع کنید، ممکن است در نهایت تصاویری با ابعاد متفاوت به دست آورید. پیش از Netpbm 10.37 (دسامبر ۲۰۰۶)، pnmcrop تمامی تصاویر ورودی به جز تصویر نخست را نادیده می‌گرفت.

اگر می‌خواهید مقدار مشخصی را از اطراف یک تصویر برش دهید، از pamcut استفاده کنید.

اگر می‌خواهید پس از حذف حاشیه‌های موجود، حاشیه‌های متفاوتی اضافه کنید، از pamcat یا pamcomp استفاده نمایید.

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

رنگ سفید را به عنوان رنگ پس‌زمینه در نظر می‌گیرد. برنامه pnmcrop حاشیه‌هایی را که سفید هستند حذف می‌کند.

می‌توانید حداکثر یکی از گزینه‌های -black، -white، -sides، -bg-color و -bg-corner را تعیین کنید.

رنگ سیاه را به عنوان رنگ پس‌زمینه در نظر می‌گیرد. برنامه pnmcrop حاشیه‌هایی را که سیاه هستند حذف می‌کند.

می‌توانید حداکثر یکی از گزینه‌های -black، -white، -sides، -bg-color و -bg-corner را تعیین کنید.

این گزینه به pnmcrop می‌گوید چه رنگی پس‌زمینه است؛ بخش‌هایی با این رنگ برش داده خواهند شد. مقدار color مقداری است که به عنوان آرگومان تابع کتابخانه‌ای pnm_parsecolor() استفاده می‌شود.

می‌توانید حداکثر یکی از گزینه‌های -black، -white، -sides، -bg-color و -bg-corner را تعیین کنید.

این گزینه در Netpbm 10.86 (مارس ۲۰۱۹) جدید بود.

رنگ پس‌زمینه را از رنگ‌های چهار گوشه تصویر ورودی تعیین می‌کند. برنامه pnmcrop حاشیه‌هایی را که به رنگ پس‌زمینه هستند حذف می‌نماید.

اگر حداقل سه گوشه از چهار گوشه هم‌رنگ باشند، pnmcrop آن را به عنوان رنگ پس‌زمینه در نظر می‌گیرد. اگر این‌طور نباشد، pnmcrop به دنبال دو گوشه هم‌رنگ با ترتیب زیر می‌گردد و اولین مورد یافت‌شده را به عنوان رنگ پس‌زمینه انتخاب می‌کند: بالا، چپ، راست، پایین. اگر هر چهار گوشه رنگ‌های متفاوتی داشته باشند، pnmcrop میانگین چهار رنگ را به عنوان رنگ پس‌زمینه فرض می‌کند.

گزینه -sides سرعت pnmcrop را کاهش می‌دهد، زیرا کل تصویر را می‌خواند تا رنگ پس‌زمینه را تعیین کند، علاوه بر حداکثر سه باری که بدون -sides تصویر را می‌خواند.

می‌توانید حداکثر یکی از گزینه‌های -black، -white، -sides، -bg-color و -bg-corner را تعیین کنید.

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

می‌توانید حداکثر یکی از گزینه‌های -black، -white، -sides، -bg-color و -bg-corner را تعیین کنید.

این گزینه در Netpbm 10.86 (مارس ۲۰۱۹) جدید بود.

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

این گزینه در Netpbm 10.29 (اوت ۲۰۰۵) جدید بود.

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

می‌توانید از این گزینه در صورتی استفاده کنید که تصویر دارای حاشیه‌هایی با رنگ‌های اندکی متغیر باشد، مانند آنچه در یک عکس اتفاق می‌افتد. عکسی را در برابر یک پرده سفید در نظر بگیرید. رنگ پرده به دلیل سایه‌ها و آلودگی و موارد مشابه اندکی تغییر می‌کند، اما هنوز از رنگ سوژه عکس کاملاً متمایز است. برنامه pnmcrop سایه خاصی را به عنوان رنگ پس‌زمینه انتخاب می‌کند و اگر مقدار مناسب -closeness را تعیین کنید، به درستی تمام پرده را به عنوان پس‌زمینه تشخیص داده و آن را برش می‌دهد.

برای پیاده‌سازی قوانین پیچیده‌تر جهت شناسایی پس‌زمینه، از -borderfile استفاده کنید.

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

این گزینه در Netpbm 10.78 (مارس ۲۰۱۷) جدید بود. در نسخه‌های قدیمی‌تر Netpbm، رنگ‌ها باید دقیقاً مطابقت می‌داشتند.

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

بدون این گزینه، pnmcrop تصویر ورودی را بررسی کرده و تعیین می‌کند کدام بخش از تصویر حاشیه و کدام بخش پیش‌زمینه (غیر حاشیه) است، و همچنین رنگ پس‌زمینه را تشخیص می‌دهد. با این گزینه، pnmcrop حاشیه‌ها را در یک تصویر پیدا کرده و سپس از آن چهار اندازه حاشیه (چپ، راست، بالا، پایین) در برش تصویری دیگر استفاده می‌کند. علاوه بر این، اگر از -margin برای افزودن حاشیه‌ها استفاده کنید، رنگ آن حاشیه‌ها همان رنگ پس‌زمینه‌ای خواهد بود که pnmcrop در فایل حاشیه شناسایی می‌کند.

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

فایل حاشیه باید دارای همان تعداد تصاویر موجود در فایل ورودی باشد؛ تعیین رنگ پس‌زمینه برای تصویر N از ورودی بر اساس تصویر N از فایل حاشیه انجام می‌شود.

این گزینه در Netpbm 10.29 (اوت ۲۰۰۵) جدید بود.

پیش از Netpbm 10.46 (مارس ۲۰۰۹)، تصویر اصلی و نه فایل حاشیه، رنگ پس‌زمینه را تعیین می‌کرد. اگر هیچ رنگ پس‌زمینه مشخصی در تصویر اصلی وجود نداشت (یعنی گوشه‌های تصویر رنگ مشترکی نداشتند)، pnmcrop با شکست مواجه می‌شد.

نحوه مدیریت تصویری را که کاملاً پس‌زمینه (خالی) است تعیین می‌کند؛ حالتی که برش در آن چندان معنایی ندارد.

برنامه با پیامی توضیحی با شکست متوقف می‌شود (پیش‌فرض).

تصویر خروجی همانند تصویر ورودی خواهد بود. گزینه -margin هیچ اثری ندارد.

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

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

هنگامی که -closeness را تعیین می‌کنید پس‌زمینه می‌تواند بیش از یک رنگ باشد، بنابراین اهمیت دارد که کدام سطر، ستون یا پیکسل باقی می‌ماند. اگر از بالا برش دهید و نه از پایین، آخرین سطر باقی می‌ماند. اگر هم از بالا و هم از پایین برش دهید، سطر میانی باقی می‌ماند. سایر حالات نیز به همین ترتیب هستند.

اگر حاشیه‌ای تعیین کنید (-margin)، تصویر خروجی کاملاً از حاشیه‌ها تشکیل می‌شود؛ هیچ سطر، ستون یا پیکسل واحدی میان حاشیه‌ها وجود نخواهد داشت. بنابراین با -margin، عدم تجانس ذکرشده در بالا وجود ندارد. اما پیش از Netpbm 10.92 (سپتامبر ۲۰۲۰)، گزینه -margin همراه با -blank-image=minimize نادیده گرفته می‌شد.

این قابلیت عجیب یک برش فرضی را انتخاب می‌کند که حتی امکان‌پذیر نیست، و بنابراین تنها همراه با -reportfull یا -reportsize معتبر است. برشی که این گزینه انتخاب می‌کند، برش کل تصویر از هر سمتی است که درخواست برش آن را داده‌اید. بنابراین اگر فقط درخواست برش سمت چپ از تصویری با عرض ۶۰۰ پیکسل را داشته باشید، این گزینه برشی معادل ۶۰۰ پیکسل از سمت چپ و هیچ مقداری از سه سمت دیگر را انتخاب می‌کند. توجه داشته باشید که اگر این برش در عمل اعمال می‌شد، تصویری بدون پیکسل تولید می‌کرد که یک تصویر معتبر Netpbm نیست. اما اگر درخواست برش هر دو سمت راست و چپ را داشته باشید ماجرا عجیب‌تر می‌شود؛ در این حالت، برش انتخاب‌شده ۶۰۰ پیکسل از هر دو سمت راست و چپ است که تصویری با عرض منفی به جا می‌گذارد.

این قابلیت در واقع زمانی مفید است که بخواهید یک مجموعه واحد از پارامترهای برش را برای برش یک جریان از تصاویر پیدا کنید. برای این کار، می‌توانید یک گذر با -reportsize و -blank-image=maxcrop انجام دهید تا حداکثر برش برای هر لبه را محاسبه کنید، و سپس از آن اعداد در گزینه‌های -cropxxx در یک گذر pamcut برای انجام برش استفاده نمایید. در این سناریو، تصاویر تماماً پس‌زمینه (خالی) تأثیری بر پارامترهای برش محاسبه‌شده توسط شما نخواهند داشت. اگر این کار را انجام می‌دهید، باید جریان‌هایی را که منحصراً حاوی تصاویر خالی هستند به طور ویژه مد نظر قرار دهید.

گزینه -margin همیشه هنگامی که تصویر تماماً پس‌زمینه است نادیده گرفته می‌شود.

این گزینه در Netpbm 10.86 (مارس ۲۰۱۹) جدید بود.

با این گزینه، pnmcrop در عمل چیزی را برش نمی‌دهد. در عوض، صرفاً پارامترهای برشی را که انجام می‌داد در خروجی استاندارد چاپ می‌کند. خروجی یک خط به ازای هر تصویر است، مانند این مثال:
<span style="font-family: monospace;">
   0 +7 -20 -10 200 300 rgb-255:10/0/255 0.0
</span>

این خط متشکل از نشانه‌های زیر است که با فاصله از هم جدا شده‌اند:

  • چند پیکسل در سمت چپ برش داده می‌شود یا افزوده می‌شود. این یک عدد ده‌دهی علامت‌دار است، که در آن + به معنای افزودن حاشیه و - به معنای برش است. اگر تغییری رخ ندهد، این مقدار صفر بدون علامت خواهد بود.
  • همان مورد، اما برای سمت راست.
  • همان مورد، اما برای سمت بالا.
  • همان مورد، اما برای سمت پایین.
  • عرض تصویر حاصل به پیکسل، به صورت عدد ده‌دهی.
  • ارتفاع تصویر حاصل به پیکسل، به صورت عدد ده‌دهی.
  • رنگی که pnmcrop به عنوان رنگ پس‌زمینه در نظر گرفت، مانند 'rgb-255:10/0/255' (این فرمتی است که توسط تابع کتابخانه‌ای pnm_parsecolor() تشخیص داده می‌شود). مقدار maxval در مشخصات رنگ، همان maxval تصویر است.
  • مقدار نزدیکی (گزینه -closeness را ببینید) که pnmcrop استفاده کرده است، به صورت عدد اعشاری ممیز شناور.

    نمی‌توانید از -borderfile همراه با این گزینه استفاده کنید.

    این گزینه در Netpbm 10.86 (مارس ۲۰۱۹) جدید بود.

این گزینه مانند -reportfull است، اما تنها چپ، راست، بالا، پایین، عرض و ارتفاع را گزارش می‌کند.

نمی‌توانید از -borderfile همراه با این گزینه استفاده کنید.

این گزینه در Netpbm 10.86 (مارس ۲۰۱۹) جدید بود.

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

pamcut(1), pamfile(1), pnm(1)

حق نشر © ۱۹۸۹ متعلق به Jef Poskanzer است.

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

http://netpbm.sourceforge.net/doc/pnmcrop.html
16 August 2020 netpbm documentation