محوّل BMP إلى Base64

رمّز ملفات الصور النقطية لنظام Windows بامتداد .bmp إلى Base64. ولأن BMP غير مضغوطة عادةً، يمكنك تحويلها إلى PNG أو JPEG أو WebP أولًا للحصول على نتيجة أقصر بكثير.

تعمل بالكامل داخل متصفحك، ولا يُرفع أي شيء.

طريقة الاستخدام

  1. أفلت ملف .bmp في منطقة الإفلات، أو انقر لاختيار واحد، أو الصق صورة.
  2. اختر PNG من «التحويل إلى» للحصول على نتيجة بلا فقدان وأصغر بكثير، أو أبقِ على «الصيغة الأصلية» إذا كان النظام المستقبِل يشترط BMP.
  3. قارن الحجم الأصلي بالحجم بعد الترميز لترى مقدار التوفير.
  4. انسخ النتيجة أو نزّلها بصيغة data URI أو Base64 الخام أو وسم img أو قاعدة CSS أو صورة Markdown.

ما هو ملف BMP؟

BMP هي صيغة الصور النقطية المستقلة عن الجهاز في Windows. تخزّن وحدات البكسل صفًا تلو الآخر، ودائمًا تقريبًا دون ضغط (يوجد وضع بسيط لترميز طول التتابع للصور ذات 4 بت و8 بت). نوع MIME الخاص بها هو image/bmp، وإن كانت بعض الأنظمة تُبلغ عن image/x-ms-bmp، وتبدأ مخرجات Base64 بـ Qk، وهو الشكل المرمّز للحرفين BM.

ولأنها غير مضغوطة، يتحدد الحجم مباشرة من الأبعاد. فصورة بعمق 24 بت وأبعاد 800 × 600 بكسل تحتاج إلى نحو 1.4 ميغابايت، وتقترب سلسلة Base64 الخاصة بها من 1.9 ميغابايت من النص.

حوّل إلى PNG قبل الترميز

PNG صيغة بلا فقدان أيضًا، لذا تحتفظ الصورة النقطية النموذجية بعمق 24 بت عند تحويلها إلى PNG بوحدات البكسل نفسها تمامًا بينما يتقلص الملف، غالبًا بعدة أضعاف، وبقدر أكبر بكثير في لقطات الشاشة والرسومات المسطحة. أما الصور الفوتوغرافية المحفوظة بصيغة BMP، فيعطي JPEG أو WebP بجودة جيدة سلسلة أقصر حتى. ويسهّل الحجم الأصلي والحجم بعد الترميز المعروضان لكل صورة رؤية الفرق.

متى تحتفظ بملف BMP الأصلي

تتوقع بعض الجهات المستقبِلة صورة نقطية حقيقية: برامج Windows القديمة، وطابعات الملصقات والإيصالات، والشاشات الصغيرة التي تتحكم بها المتحكمات الدقيقة، أو ملفات الاختبار التي يجب أن تطابق ملفًا بايتًا ببايت. في هذه الحالات لا تفعّل التحويل، فتكون مخرجات Base64 نسخة مطابقة للملف. وتستطيع جميع المتصفحات الرئيسية عرض صور data:image/bmp، لكن PNG هي الصيغة الأفضل لصفحات الويب والبريد الإلكتروني.

التحويل نفسه في سكربت، باستخدام Python ومكتبة Pillow:

from PIL import Image
import base64, io

buf = io.BytesIO()
Image.open('scan.bmp').save(buf, 'PNG')
uri = 'data:image/png;base64,' + base64.b64encode(buf.getvalue()).decode()

الأسئلة الشائعة

لماذا تكون سلسلة Base64 لملف BMP طويلة إلى هذا الحد؟

تخزّن BMP كل بكسل دون ضغط، ثم يضيف Base64 ثلثًا آخر فوق ذلك. والتحويل إلى PNG أولًا يقصّر السلسلة عادةً بشكل كبير دون فقدان أي تفاصيل.

هل يؤدي تحويل BMP إلى PNG إلى فقدان الجودة؟

لا. PNG صيغة بلا فقدان، لذا تبقى وحدات البكسل كما هي. ولا يتغير إلا أسلوب تخزينها.

هل تستطيع المتصفحات عرض عنوان data:image/bmp؟

نعم، تعرض متصفحات Chrome وEdge وFirefox وSafari جميعها صيغة BMP. أما برامج البريد الإلكتروني وكثير من المنصات الإلكترونية فتتعامل معها بموثوقية أقل، لذا تكون PNG الخيار الأكثر أمانًا هناك.

هل تدعم BMP الشفافية؟

يمكن لملف BMP بعمق 32 بت تخزين قناة ألفا، لكن البرامج والمتصفحات تتعامل معها بشكل غير متسق. فإذا كنت تحتاج إلى الشفافية، فحوّل الصورة إلى PNG أو WebP.