فایل JPEG چیست؟
JPEG نوعی فرمت تصویر است که با استفاده از روش فشرده سازی با اتلاف ذخیره می شود. تصویر خروجی، در نتیجه فشرده سازی، تعادلی بین اندازه ذخیره سازی و کیفیت تصویر است. کاربران می توانند سطح فشرده سازی را برای رسیدن به سطح کیفی مورد نظر تنظیم کنند و در عین حال اندازه ذخیره سازی را کاهش دهند. اگر فشرده سازی 10:1 روی تصویر اعمال شود، کیفیت تصویر به میزان قابل توجهی تحت تأثیر قرار می گیرد. هرچه مقدار فشرده سازی بیشتر باشد، کیفیت تصویر کاهش می یابد.
مشخصات فرمت فایل
فرمت فایل تصویر JPEG توسط Joint Photographic Experts Group استاندارد شد و از این رو JPEG نام گرفت. فرمت انتخاب ذخیره و انتقال تصاویر عکاسی در وب بوده است. تقریباً همه سیستمهای عامل اکنون بینندههایی دارند که از تجسم تصاویر JPEG پشتیبانی میکنند، که اغلب با پسوند JPG نیز ذخیره میشوند. حتی مرورگرهای وب از تجسم تصاویر JPEG پشتیبانی می کنند. قبل از ورود به مشخصات فرمت فایل JPEG، فرآیند کلی مراحل مربوط به ایجاد JPEG باید ذکر شود.
مراحل فشرده سازی JPEG
تبدیل: تصاویر رنگی از RGB به یک تصویر درخشندگی/کرومینانس تبدیل میشوند (چشم به درخشندگی حساس است نه کرومینانس، به طوری که بخش کرومینانس میتواند دادههای زیادی را از دست بدهد و بنابراین میتواند به شدت فشرده شود.
نمونه برداری پایین: نمونه برداری پایین برای جزء رنگی انجام می شود نه برای جزء روشنایی. بنابراین اندازه تصویر کاهش می یابد، زیرا جزء ‘y’ لمس نمی شود، هیچ افت قابل توجهی در کیفیت تصویر وجود ندارد.
سازماندهی در گروه ها: پیکسل های هر جزء رنگی در گروه های 8×2 پیکسلی به نام واحد داده سازماندهی می شوند، اگر تعداد سطرها یا ستون ها مضرب 8 نباشد، ردیف پایین و سمت راست ترین ستون ها کپی می شوند.
تبدیل کسینوس گسسته: تبدیل کسینوس گسسته (DCT) سپس به هر واحد داده اعمال می شود تا نقشه 8×8 از اجزای تبدیل شده ایجاد شود. DCT شامل مقداری از دست دادن اطلاعات به دلیل دقت محدود محاسبات کامپیوتری است. این به این معنی است که حتی بدون نقشه، کیفیت تصویر کمی کاهش می یابد، اما معمولاً کوچک است.
کوانتیزاسیون: هر یک از 64 جزء تبدیل شده در واحد داده به یک عدد جداگانه به نام ضریب کوانتیزاسیون (QC) تقسیم می شود و سپس به یک عدد صحیح گرد می شود. اینجاست که اطلاعات به طور جبران ناپذیری از بین می رود، QC بزرگ باعث ضرر بیشتر می شود. به طور کلی، اکثر ابزارهای JPEG امکان استفاده از جداول QC توصیه شده توسط استاندارد JPEG را می دهند.
رمزگذاری: 64 ضریب تبدیل شده کوانتیزه (که اکنون اعداد صحیح هستند) هر واحد داده با استفاده از ترکیبی از کدگذاری RLE و هافمن کدگذاری می شوند.
افزودن هدر: مرحله آخر هدر و تمام پارامترهای JPEG استفاده شده را اضافه می کند و نتیجه را به بیرون می دهد.
رمزگشای JPEG از مراحل معکوس برای تولید تصویر اصلی از تصویر فشرده استفاده می کند.
ساختار فایل
یک تصویر JPEG به عنوان دنباله ای از بخش ها نشان داده می شود که هر بخش با یک نشانگر شروع می شود. هر نشانگر با بایت 0xFF و به دنبال آن پرچم نشانگر برای نشان دادن نوع نشانگر شروع می شود. محموله به دنبال نشانگر بر اساس نوع نشانگر متفاوت است. انواع رایج نشانگر JPEG به شرح زیر است:
نام کوتاه | بایت | بارگذاری | نام | نظرات |
---|---|---|---|---|
SOI | 0xFF، 0xD8 | هیچکدام | شروع تصویر | |
S0F0 | 0xFF, 0xC0 | اندازه متغیر | شروع قاب | |
S0F2 | 0xFF, 0xC2 | اندازه متغیر | شروع قاب | |
DHT | 0xFF, 0xC4 | اندازه متغیر | تعریف جداول هافمن | |
DQT | 0xFF، 0xDB | اندازه متغیر | تعریف جدول(های) کوانتیزاسیون | |
DRI | 0xFF، 0xDD | 4 بایت | فاصله راه اندازی مجدد را تعریف کنید | |
SOS | 0xFF، 0xDA | اندازه متغیر | شروع اسکن | |
RSTn | 0xFF، 0xD//n//(//n//#0..7) | هیچکدام | راه اندازی مجدد | |
APPn | 0xFF, 0xE//n// | اندازه متغیر | مخصوص برنامه | |
COM | 0xFF، 0xFE | اندازه متغیر | نظر | |
EOI | 0xFF، 0xD9 | هیچکدام | انتهای تصویر |
در داده های کدگذاری شده با آنتروپی، پس از هر بایت 0xFF، یک بایت 0x00 توسط رمزگذار قبل از بایت بعدی وارد می شود، به طوری که به نظر نمی رسد نشانگری وجود داشته باشد که در آن هیچ موردی وجود ندارد و از خطاهای کادربندی جلوگیری می کند. رمزگشاها باید از این 0x00 بایت صرف نظر کنند. این تکنیک که byte stuffing نامیده میشود (به بخش مشخصات JPEG F.1.2.3 مراجعه کنید)، فقط برای دادههای کدگذاری شده با آنتروپی اعمال میشود، نه برای دادههای بار نشانگر. البته توجه داشته باشید که داده های کدگذاری شده با آنتروپی دارای چند نشانگر خاص خود هستند. به ویژه نشانگرهای Reset (0xD0 تا 0xD7)، که برای جداسازی تکه های مستقل داده های کدگذاری شده با آنتروپی برای امکان رمزگشایی موازی استفاده می شوند، و رمزگذارها می توانند این نشانگرهای Reset را در فواصل زمانی منظم وارد کنند (اگرچه همه رمزگذارها این کار را انجام نمی دهند).