Pamtogif User Manual(0) Pamtogif User Manual(0)

pamtogif - تبدیل یک تصویر Netpbm به یک تصویر GIF

pamtogif

[-interlace]

[-sort]

[-mapfile=mapfile] [-transparent=[=]color]

[-alphacolor=color]

[-comment=text]

[-noclear]

[-nolzw]

[-aspect=fraction]

[-verbose] [netpbmfile]

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

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

pamtogif یک تصویر Netpbm را به عنوان ورودی خوانده و یک فایل GIF به عنوان خروجی تولید می‌کند.

این برنامه فقط تصاویر GIF تکی ایجاد می‌کند. برای ترکیب چندین تصویر GIF در یک GIF متحرک، از gifsicle (که بخشی از بسته Netpbm نیست) استفاده کنید.

pamtogif فایل GIF را یا با فرمت اصلی GIF87 یا فرمت جدیدتر GIF89 ایجاد می‌کند. این برنامه زمانی GIF89 تولید می‌کند که خروجی نیازمند ویژگی‌های معرفی‌شده در GIF89، یعنی شفافیت یا کامنت‌ها باشد. در غیر این صورت، GIF87 ایجاد می‌کند. برنامه‌های بسیار قدیمی نمایش GIF احتمالاً قادر به شناسایی GIF89 نیستند. خروجی زمانی نیازمند شفافیت است که ورودی حاوی اطلاعات شفافیت باشد یا شما گزینه -transparent را مشخص کرده باشید. همچنین زمانی که گزینه -comment را تعیین کنید، خروجی نیازمند کامنت خواهد بود.

pamtogif یک تصویر GIF با یک بلوک تصویری منفرد تولید می‌کند، به این معنی که تصویر نمی‌تواند بیش از ۲۵۶ رنگ داشته باشد (حاوی یک جدول رنگ منفرد با حداکثر اندازه ۲۵۶ است). اگر تصویری که می‌خواهید تبدیل کنید رنگ‌های بیشتری از این مقدار دارد (ppmhist می‌تواند این موضوع را مشخص کند)، می‌توانید از pnmquant برای کاهش آن به ۲۵۶ رنگ استفاده نمایید؛ یا از روش پیچیده‌تر اما سریع‌ترِ شرح داده شده ذیل گزینه -mapfile بهره ببرید.

اگر تصویر ورودی شما یک PAM دارای اطلاعات شفافیت باشد، pamtogif یک مدخل در جدول رنگ GIF را به طور ویژه برای پیکسل‌های شفاف اختصاص می‌دهد، بنابراین حداکثر می‌توانید ۲۵۵ رنگ کدر (غیرشفاف) داشته باشید. در مقابل، اگر از گزینه -transparent استفاده کنید، یکی از رنگ‌های ورودی شفاف می‌شود، بنابراین محدودیت همچنان ۲۵۶ خواهد بود.

pamtogif اطلاعات شفافیت را در ورودی از روی مقادیر RGB_ALPHA، GRAYSCALE_ALPHA یا BLACKANDWHITE_ALPHA در tuple type تشخیص می‌دهد. این موضوع برای هر تصویری که اطلاعات شفافیت داشته و توسط یکی از برنامه‌های Netpbm مربوط به پردازش تصویر تولید شده باشد، صادق است. از سوی دیگر، اگر یک فایل PAM دارید که به روش دیگری ایجاد شده است، اما می‌دانید صفحه‌ها (planes) معنایی معادل همین انواع تاپل دارند، می‌توانید با تغییر نوع تاپل به صورت متناسب پیش از ارسال به pamtogif، آن را وادار به پردازش اطلاعات شفافیت کنید. برای تغییر نوع تاپل می‌توانید از pamstack استفاده نمایید.

pamtogif در Netpbm نسخه 10.37 (دسامبر ۲۰۰۶) معرفی شد. در نسخه‌های قدیمی‌تر Netpbm، از ppmtogif استفاده کنید.

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

تولید یک فایل GIF درهم‌بافته (interlaced).
تولید یک فایل GIF با نگاشت رنگی (color map) مرتب‌شده بر اساس یک ترتیب قابل پیش‌بینی.

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

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

استفاده از رنگ‌های موجود در فایل mapfile برای ایجاد نگاشت رنگ در فایل GIF، به جای رنگ‌های موجود در netpbmfile. mapfile می‌تواند هر فایل PPM باشد؛ تنها چیزی که اهمیت دارد رنگ‌های درون آن است. اگر رنگ‌های موجود در netpbmfile با رنگ‌های موجود در mapfile مطابقت نداشته باشند، pamtogif آن‌ها را با «بهترین تطابق» معادل‌سازی می‌کند. شما می‌توانید با استفاده از pnmremap برای تغییر رنگ‌های ورودی به رنگ‌های موجود در فایل نگاشت، نتیجه بسیار بهتری به دست آورید.

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

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

شما می‌توانید از -mapfile برای سرعت بخشیدن به تبدیل تصویری استفاده کنید که از قبل به دلیل پردازش قبلی تصویرتان، یک فایل نگاشت برای آن دارید. برای مثال، معمول است که با تصویری که بیش از ۲۵۶ رنگ دارد شروع کنید و رنگ‌های آن را به مجموعه‌ای از ۲۵۶ رنگ با استفاده از pnmquant نگاشت مجدد نمایید تا pamgtogif بتواند آن را تبدیل کند (یک GIF تنها می‌تواند ۲۵۶ رنگ داشته باشد؛ pamtogif بدون -mapfile روی هر تصویری که بیش از این تعداد رنگ داشته باشد با شکست مواجه می‌شود). هنگامی که این کار را انجام می‌دهید، pnmquant پالتی برای انجام کوانتیزه‌سازی رنگ تولید می‌کند، سپس pamtogif یک پالت یکسان از تصویر کوانتیزه‌شده ایجاد می‌کند. می‌توانید با یک بار تولید پالت، در محاسبات صرفه‌جویی کنید:


    $ pnmcolormap 256 myimage.ppm >/tmp/colormap.ppm
    $ pamtogif myimage.ppm -mapfile=/tmp/colormap.ppm >output.gif
pamtogif رنگ مشخص‌شده را به عنوان شفاف در تصویر GIF علامت‌گذاری می‌کند.

اگر -transparent را مشخص نکنید، pamtogif هیچ رنگی را به عنوان شفاف علامت‌گذاری نمی‌کند (به جز مواردی که با اطلاعات شفافیت در فایل ورودی مشخص شده باشند).

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

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

با این حال، اگر پیش از مشخص کردن رنگ یک «=» قرار دهید، برای نمونه -transparent==red، تنها همان رنگ دقیق شفاف خواهد شد. اگر آن رنگ در تصویر ظاهر نشود، هیچ شفافیتی وجود نخواهد داشت. در این حالت pamtogif یک پیام اطلاع‌رسانی صادر می‌کند.

هنگامی که -transparent را مشخص می‌کنید، pamtogif اطلاعات صریح شفافیت («کانال آلفا») در تصویر ورودی را نادیده می‌گیرد.

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

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

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

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

قراردادن یک یادداشت در خروجی GIF با متن یادداشت text.

بدون این گزینه، هیچ یادداشتی در خروجی قرار نخواهد گرفت.

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

$ pamtogif -comment "this is a comment" <xxx.ppm >xxx.gif

این گزینه باعث می‌شود که خروجی حاوی هیچ کد پاک‌سازی (clear code) در فرمت GIF نباشد.

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

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

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

حالت پیش‌فرض استفاده از کدهای پاک‌سازی است.

این گزینه در Netpbm 10.82 (مارس ۲۰۱۸) جدید بود. پیش از آن، برنامه همیشه از کدهای پاک‌سازی استفاده می‌کرد.

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

این گزینه باعث می‌شود که خروجی GIF و در نتیجه pamtogif از فشرده‌سازی LZW (Lempel-Ziv) استفاده نکند. در نتیجه، فایل تصویر بزرگ‌تر خواهد بود و پیش از انقضای حق اختراع، نیازی به پرداخت حق امتیاز به دارنده حق اختراع LZW نبود. به بخش مجوز (LICENSE) در ادامه مراجعه کنید.

روش LZW روشی برای ترکیب اطلاعات چندین پیکسل در یک کد GIF واحد است. با گزینه -nolzw، برنامه pamtogif برای هر پیکسل یک کد GIF ایجاد می‌کند، بنابراین هیچ فشرده‌سازی انجام نمی‌دهد و از LZW استفاده نمی‌کند. با این حال، هر رمزگشای GIF، چه از یک فشرده‌گشای LZW استفاده کند یا نه، این قالب فشرده‌نشده را به‌درستی رمزگشایی خواهد کرد. یک فشرده‌گشای LZW این مورد را به عنوان حالت خاصی از فشرده‌سازی LZW در نظر می‌گیرد..sp توجه داشته باشید که اگر فردی از یک فشرده‌گشای LZW مانند نمونهٔ موجود در giftopnm یا تقریباً هر برنامه نمایش گرافیکی دیگری برای پردازش خروجی pamtogif -nolzw استفاده کند، در واقع در حال استفاده از حق ثبت اختراع LZW است. با این حال دارنده این حق اختراع، تمایل بسیار کمتری به اعمال آن بر رمزگشایی نسبت به رمزگذاری نشان داده است.

این نسبت ابعاد پیکسل‌های تصویر است. تنها اثر آن، ثبت این اطلاعات در GIF برای استفاده توسط هر برنامه‌ای است که GIF را تفسیر می‌کند. توجه داشته باشید که این ویژگی GIF به‌ندرت استفاده می‌شود و اکثر رمزگشاهای GIF این اطلاعات را نادیده گرفته و فرض می‌کنند پیکسل‌ها مربعی هستند.

پیکسل‌ها در یک تصویر Netpbm دارای نسبت ابعاد نیستند؛ همواره یک تناظر یک‌به‌یک میان پیکسل‌های GIF و پیکسل‌های Netpbm برقرار است.

نسبت ابعاد حاصل تقسیم پهنا بر ارتفاع است. فرمت GIF نسبت‌های ابعاد از 0.25 (1:4) تا 4 (4:1) را با گام‌های 1/64 مجاز می‌داند. pamtogif یک تعمیم طبیعی از GIF را پیاده‌سازی می‌کند که نسبت ابعاد را تا 4 14/64 مجاز می‌سازد. اگر مقداری خارج از این محدوده مشخص کنید، pamtogif با شکست مواجه می‌شود. pamtogif مقدار fraction را به نزدیک‌ترین 1/64 گرد می‌کند.

پیش‌فرض مربعی است (1.0).

این گزینه در Netpbm 10.38 (مارس ۲۰۰۷) تازه بود. پیش از آن، پیکسل‌ها همواره مربعی بودند.

این گزینه باعث می‌شود pamtogif اطلاعاتی را درباره فرایند تبدیل و تصویری که تولید می‌کند نمایش دهد.

giftopnm(1), pnmremap(1), ppmtogif(1),

gifsicle http://www.lcdf.org/gifsicle , pnm(1), pam(1).

دستور pamtogif در Netpbm 10.37 (دسامبر ۲۰۰۶) جدید بود. این ابزار جایگزین ppmtogif شد که از سال ۱۹۸۹ تصاویر GIF را برای کاربران Pbmplus/Netpbm ایجاد می‌کرد.

تغییر ظاهری اصلی در تبدیل از ppmtogif به pamtogif این بود که pamtogif می‌توانست از اطلاعات شفافیت («کانال آلفا») در ورودی PAM استفاده کند، در حالی که در ppmtogif، کاربر باید ماسک شفافیت را در یک تصویر جداگانه شبه-PGM (از طریق گزینه -alpha) ارائه می‌داد.

جف پوسکانزر (Jef Poskanzer) ابزار ppmtogif را در سال ۱۹۸۹ نوشت، و این برنامه همواره یکی از ارکان Pbmplus/Netpbm بوده است زیرا GIF فرمت تصویری بسیار محبوبی است. جف رمزگذاری LZW را بر پایه GIFENCOD اثر دیوید رولی (David Rowley) <mgardi@watdcsu.waterloo.edu> پیاده‌سازی کرد. جف فایل GIFCOMPR.C مربوط به GIFENCOD را تقریباً به‌طور کامل گنجاند. رولی نیز به نوبه خود، کد فشرده‌سازی LZW را از compress کلاسیک یونیکس اقتباس کرده بود که از روش‌های شرح‌داده‌شده در IEEE Computer، ژوئن ۱۹۸۴ استفاده می‌کرد.

ابزار ppmtogif متعلق به جف به‌طور مشهودی فاقد قابلیت استفاده از یک ماسک شفافیت بود. شما می‌توانستید پیکسل‌های شفاف را در یک GIF ایجاد کنید، اما فقط با گزینه -transparent، که به کاربر امکان می‌داد تعیین کند تمام پیکسل‌های دارای یک رنگ خاص در ورودی، شفاف باشند. برایان هندرسون (Bryan Henderson) در ژوئیه ۲۰۰۱ گزینه -alpha را اضافه کرد تا بتوانید تصویری از یک ماسک ارائه دهید که دقیقاً مشخص می‌کند کدام پیکسل‌ها باید شفاف باشند، و آن پیکسل‌ها می‌توانستند رنگی مشابه سایر پیکسل‌های کدر داشته باشند.

برایان هندرسون در اکتبر ۲۰۰۱ بخش مهم دیگری از کد و کارایی را اضافه کرد: قابلیت تولید یک GIF بدون استفاده از حق اختراع LZW -- یک GIF فشرده‌نشده. این موضوع در آن زمان برای افراد زیادی بسیار مهم بود زیرا حق اختراع GIF همچنان معتبر بود، و این قابلیت به آن‌ها اجازه می‌داد تصویری بسازند که هر نمایش‌دهنده GIF بتواند بدون حق امتیاز (royalty-free) آن را نمایش دهد. برایان برای این کار از کدهای موجود در djpeg متعلق به Independent JPEG Group استفاده کرد.

هیچ کدی از نسخه اصلی جف در pamtogif وجود ندارد، اما جف ممکن است به دلیل روش تکامل آن، همچنان حق نشر (copyright) آن را در اختیار داشته باشد. تقریباً تمام کد pamtogif توسط برایان هندرسون نوشته شده و به مالکیت عمومی (public domain) واگذار شده است.

اگر از pamtogif بدون گزینهٔ -nolzw استفاده کنید، در حال استفاده از حق اختراع روش فشرده‌سازی LZW هستید که متعلق به Unisys است. این حق اختراع منقضی شده است (در سال ۲۰۰۳ در ایالات متحده و در سال ۲۰۰۴ در سایر نقاط جهان)، بنابراین اکنون اهمیتی ندارد. در زمان معتبر بودن حق اختراع، بیشتر افرادی که از pamtogif و برنامه‌های مشابه استفاده می‌کردند، بدون داشتن مجوزی از Unisys این کار را انجام می‌دادند. Unisys معمولاً ۵۰۰۰ دلار برای مجوز استفاده‌های جزئی از این حق اختراع درخواست می‌کرد. Unisys هرگز حق اختراع را علیه کاربران جزئی اعمال نکرد.

شایعات حاکی از آن است که IBM نیز دارای حق اختراعی بوده یا هست که pamtogif را پوشش می‌دهد.

یک جایگزین برای قالب GIF که برای استفاده از آن هرگز به هیچ حق اختراعی نیاز نبوده، قالب PNG است.

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

http://netpbm.sourceforge.net/doc/pamtogif.html
09 June 2021 netpbm documentation