پرش به محتوای اصلی

قالب‌های فایل

BMP چیست؟ توضیح کامل فرمت تصویر بیت‌مپ

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

نویسنده: Hemen Dönüştür Editör Ekibiتاریخ انتشار: 8 دقیقه مطالعه

تصویر جلد راهنمای فرمت فایل BMP

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

BMP چیست؟

BMP (bitmap، با پسوند .bmp) یک فرمت فایل تصویر شطرنجی و مبتنی بر پیکسل است. مستندات فنی آن را DIB یا بیت‌مپ مستقل از دستگاه (device-independent bitmap) هم می‌نامند. «مستقل از دستگاه» یعنی تصویر صرف‌نظر از کارت گرافیک یا چاپگری که روی آن ساخته شده، به یک شکل تفسیر می‌شود: فایل اطلاعات لازم برای رمزگشایی رنگ‌هایش را در سرآیند و جدول رنگ خودش دارد.

طبق مستندات Win32 مایکروسافت، فایل بیت‌مپ با ساختار BITMAPFILEHEADER شروع می‌شود، پس از آن یکی از BITMAPINFOHEADER، BITMAPV4HEADER یا BITMAPV5HEADER می‌آید، سپس یک جدول رنگ اختیاری و در پایان داده‌های پیکسل. نوع MIME آن image/bmp است.

تاریخچهٔ کوتاه: از Windows و OS/2 تا امروز

BMP حاصل کار مشترک Microsoft و IBM روی Windows و OS/2 در اواخر دههٔ 1980 است. بیت‌مپ‌ها در دوران Windows 1.0 به‌شدت به دستگاه خروجی وابسته بودند؛ شکل مستقل از دستگاه با Windows 3.0 در سال 1990 فراگیر شد. سرآیند 12 بایتی BITMAPCOREHEADER که برای OS/2 Presentation Manager تعریف شد، دلیل این است که هنوز از فایل‌های «OS/2 BMP» صحبت می‌شود.

در طول سال‌ها این فرمت با افزودن فیلدهایی به انتهای سرآیند گسترش یافت. طبق توصیف فرمت در Library of Congress، نسخهٔ 5 با Windows 98 در سال 1998 آمد و ثبت پروفایل‌های رنگ ICC در فایل را ممکن کرد. اندازه‌های رایج سرآیند امروز این‌هاست:

سرآینداندازهافزودهٔ اصلی
BITMAPCOREHEADER12 بایتساختار پایهٔ سازگار با OS/2 1.x
BITMAPINFOHEADER40 بایترایج‌ترین سرآیند، از Windows 3.0؛ فیلدهای فشرده‌سازی و وضوح
BITMAPV4HEADER108 بایتماسک‌های رنگ، ماسک آلفا و اطلاعات فضای رنگ
BITMAPV5HEADER124 بایتپروفایل‌های ICC جاسازی‌شده یا پیوندی، نیت رندر (rendering intent)

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

درون فایل BMP

سرآیند فایل و امضای «BM»

هر فایل BMP با یک سرآیند فایل 14 بایتی شروع می‌شود و دو بایت نخست آن نویسه‌های ASCII BM (در مبنای شانزده 42 4D) هستند. این سرآیند اندازهٔ کل فایل و فاصلهٔ بایتی (offset) شروع داده‌های پیکسل را ذخیره می‌کند. DIB که روی کلیپ‌بورد ویندوز قرار می‌گیرد (فرمت CF_DIB) این 14 بایت را ندارد و مستقیم با سرآیند اطلاعات شروع می‌شود.

سرآیند اطلاعات

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

جدول رنگ (پالت)

در تصاویر 8 بیتی یا کمتر به ازای هر پیکسل، پیکسل یک رنگ نیست، بلکه اندیسی به جدول رنگ است. در مثال مستند مایکروسافت، یک بیت‌مپ 32x32 با 16 رنگ آرایهٔ پیکسلی 32 x 32 x 4 = 4096 بیتی دارد، چون 4 بیت برای نشانی‌دهی 16 رنگ کافی است.

داده‌های پیکسل: ردیف‌های پایین به بالا و هم‌ترازی 4 بایتی

BMP دو ویژگی غیرعادی دارد. نخست، اگر ارتفاع مثبت باشد، ردیف‌ها از پایین به بالا ذخیره می‌شوند: نخستین ردیف فایل، پایین‌ترین ردیف تصویر است. ارتفاع منفی ردیف‌ها را از بالا به پایین ذخیره می‌کند، اما چنین تصاویری را نمی‌توان فشرده کرد. دوم، هر ردیف تا مضربی از 4 بایت پر می‌شود. مایکروسافت طول ردیف (stride) را این‌گونه می‌دهد:

stride = ((width * bitCount + 31) & ~31) >> 3
imageSize = |height| * stride

برای یک تصویر 1920x1080 با 24 بیت، هر ردیف 1920 x 3 = 5,760 بایت است (که از قبل مضربی از 4 است)، بنابراین داده‌های پیکسل 5,760 x 1,080 = 6,220,800 بایت می‌شود. با سرآیندهای 54 بایتی، فایل حدود 6.2 MB است. همین تصویر به صورت JPG معمولاً کسر کوچکی از این حجم است.

عمق رنگ، فشرده‌سازی و شفافیت

مستندات BITMAPV5HEADER عمق‌های 1، 4، 8، 16، 24 و 32 بیت به ازای هر پیکسل را تعریف می‌کند (مقدار 0 یعنی عمق از دادهٔ JPEG یا PNG جاسازی‌شده می‌آید). 1 بیت سیاه و سفید، 4 بیت 16 رنگ و 8 بیت یک پالت 256 رنگی است. در 24 بیت هر پیکسل سه بایت به ترتیب آبی، سبز و قرمز است.

فیلد فشرده‌سازی می‌تواند این مقادیر را بگیرد:

  • BI_RGB: بدون فشرده‌سازی. در عمل اکثریت قاطع فایل‌های BMP.
  • BI_RLE8 و BI_RLE4: کدگذاری سادهٔ طول اجرا (run-length) برای تصاویر پالتی 8 و 4 بیتی. برای نواحی بزرگ یکدست مفید و برای عکس‌ها تقریباً بی‌فایده است.
  • BI_BITFIELDS: فشرده‌سازی نیست؛ ماسک‌ها تعیین می‌کنند بیت‌های قرمز، سبز و آبی در پیکسل‌های 16 و 32 بیتی کجا قرار دارند (برای نمونه RGB 565).
  • BI_JPEG و BI_PNG: اجازهٔ دادهٔ JPEG یا PNG درون بیت‌مپ را می‌دهند. نمایشگرهای عمومی به‌ندرت از آن پشتیبانی می‌کنند.

شفافیت ناهماهنگ‌ترین بخش BMP است. ماسک آلفا در سرآیندهای V4 و V5 می‌تواند بایت چهارم یک پیکسل 32 بیتی را میزان کدری تعریف کند، اما در یک BMP کلاسیک 32 بیتی این بایت «بلااستفاده» توصیف شده و بسیاری از برنامه‌ها آن را نادیده می‌گیرند. بنابراین BMP 32 بیتی‌ای که در یک برنامه شفاف دیده می‌شود و در برنامهٔ دیگر روی زمینهٔ سیاه، چیز عجیبی نیست. اگر به شفافیت نیاز دارید، PNG انتخاب بسیار امن‌تری است.

پشتیبانی در سیستم‌ها، مرورگرها و نرم‌افزارها

BMP تقریباً همه‌جا باز می‌شود. نمایشگرهای داخلی ویندوز و Paint، برنامهٔ Preview در macOS و نمایشگرهای رایج Linux همه آن را می‌خوانند. راهنمای فرمت‌های تصویر MDN پشتیبانی از BMP را در همهٔ نسخه‌های Chrome، Edge، Firefox، Opera و Safari فهرست می‌کند. همین راهنما تأکید می‌کند که فایل‌های BMP بدون فشرده‌سازی در مقایسه با PNG یا JPG بسیار حجیم‌اند و به‌طور کلی باید از به‌کارگیری آن‌ها در محتوای وب‌سایت پرهیز کرد.

BMP امروز کجا به کار می‌رود؟

  • منابع برنامه‌های ویندوز و نرم‌افزارهای قدیمی: تصاویر نوار ابزار، گرافیک‌های ویزارد نصب و برخی دارایی‌های بازی‌ها هنوز BMP هستند.
  • سیستم‌های نهفته و میکروکنترلرها: دستگاهی که نمایشگر دارد به رمزگشای JPEG نیاز ندارد؛ داده‌های پیکسل را می‌توان مستقیم روی صفحه کپی کرد.
  • دوربین‌های صنعتی، اسکنرها و ابزارهای آزمون: وقتی خروجی خام و بدون اتلاف لازم است، BMP یک فرمت میانی ساده است.
  • آموزش: با سرآیندی تنها چند ده بایتی، BMP اغلب نخستین فرمتی است که دانشجویان در درس‌های پردازش تصویر می‌خوانند و می‌نویسند.

نقاط قوت و ضعف

نقاط قوتنقاط ضعف
بدون اتلاف؛ مقادیر پیکسل هرگز تغییر نمی‌کنندبدون فشرده‌سازی، بنابراین فایل‌ها بسیار حجیم‌اند
خواندن و نوشتن بسیار ساده، بدون هزینهٔ پردازندهپشتیبانی ناهماهنگ از شفافیت
تقریباً در هر سیستم‌عامل و مرورگری باز می‌شودپشتیبانی ضعیف از فراداده (EXIF، توضیحات)
حالت‌های پالتی برای دستگاه‌های کم‌منبع مناسب‌اندبرای وب، ایمیل و فرم‌های بارگذاری ناکارآمد است

مشکلات رایج و راه‌حل آن‌ها

فایل برای ایمیل یا فرم بارگذاری بیش از حد بزرگ است

این رایج‌ترین مشکل است. برای عکس‌ها و اسکن‌ها، تبدیل BMP به JPG معمولاً حجم را دست‌کم یک مرتبهٔ بزرگی کاهش می‌دهد. برای اسکرین‌شات‌ها، نمودارها یا هر چیزی که متن دارد، تبدیل BMP به PNG بهتر است: PNG هم بدون اتلاف است اما فشرده می‌شود و نویزی را که JPG دور لبه‌های تیز ایجاد می‌کند اضافه نمی‌کند.

یک BMP سی‌ودوبیتی پس‌زمینهٔ سیاه نشان می‌دهد

برنامه بایت آلفا را نمی‌شناسد یا اشتباه می‌خواند. تبدیل به PNG معمولاً مشکل را حل می‌کند. هنگام تبدیل به JPG که شفافیت ندارد، نواحی شفاف با سفید یا رنگی که انتخاب می‌کنید پر می‌شوند.

تصویر وارونه یا کج است

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

برنامه‌ای BMP را باز نمی‌کند

فایل‌های BMP با فشرده‌سازی RLE، با BI_BITFIELDS یا با دادهٔ JPEG/PNG جاسازی‌شده در برخی خواننده‌های ساده پشتیبانی نمی‌شوند. ذخیرهٔ دوباره به صورت BMP بیست‌وچهاربیتی بدون فشرده‌سازی یا تبدیل به PNG مشکل سازگاری را برطرف می‌کند.

نکته‌های تبدیل

  • JPG برای عکس، PNG برای گرافیک: هنگام کنار گذاشتن BMP همان قاعدهٔ همیشگی برقرار است. برای وب می‌توانید در مبدل تصویر WebP یا AVIF را هم انتخاب کنید.
  • کیفیت را بالا نگه دارید: چون BMP بدون اتلاف است، کیفیت 85 تا 90% در JPG نتیجه‌ای می‌دهد که تشخیصش از نسخهٔ اصلی دشوار است.
  • در صورت نیاز کوچک کنید: اگر فایل هنوز بزرگ است، ابعاد پیکسلی را کم کنید یا از فشرده‌سازی تصویر برای رسیدن به حجم هدف استفاده کنید.
  • در جهت عکس: اگر یک دستگاه نهفته یا برنامهٔ قدیمی BMP می‌خواهد، در مبدل تصویر BMP را به‌عنوان مقصد انتخاب کنید. ابزارهای ما یک BMP استاندارد بیست‌وچهاربیتی بدون فشرده‌سازی می‌نویسند؛ نواحی شفاف روی رنگ پس‌زمینه‌ای که انتخاب می‌کنید یکدست می‌شوند.

صفحه‌های تبدیل BMP ما در مرورگر شما اجرا می‌شوند: فایل آپلود نمی‌شود و هرگز از دستگاه شما خارج نمی‌شود.

پرسش‌های متداول

آیا BMP و DIB یکی هستند؟

در عمل بله. DIB ساختار بیت‌مپ مستقل از دستگاه است که ویندوز در حافظه و کلیپ‌بورد به کار می‌برد؛ فایل BMP همان ساختار است با یک سرآیند فایل 14 بایتی در ابتدایش.

آیا BMP بدون اتلاف است؟

بله. فایل‌های BMP بدون فشرده‌سازی و با فشرده‌سازی RLE مقادیر پیکسل‌ها را دقیقاً حفظ می‌کنند. تنها استثنا BMPهای نادری است که دادهٔ JPEG جاسازی‌شده دارند.

آیا تبدیل BMP به PNG کیفیت را کم می‌کند؟

نه. PNG هم بدون اتلاف است؛ تصویر یکسان می‌ماند و فقط چون فشرده می‌شود کوچک‌تر می‌شود.

آیا می‌توانم در وب‌سایت از BMP استفاده کنم؟

مرورگرها BMP را نمایش می‌دهند، اما فایل‌ها بی‌دلیل حجیم‌اند و صفحه‌ها را کند می‌کنند. برای وب از JPG، PNG، WebP یا AVIF استفاده کنید.

آیا BMP از شفافیت پشتیبانی می‌کند؟

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

منابع

مبدل‌های مرتبط

همه مقاله‌ها