> base64 | decode | PNG <
// فك ترميز سلاسل Base64 وعناوين data URI مرة أخرى إلى صور PNG — مع الحفاظ على قناة ألفا، معاينة فورية، تنزيل بنقرة واحدة
ستظهر صورة PNG المفكوكة هنا
دقة مطابقة للبت
ملف PNG المفكوك مطابق للأصل على مستوى البايت — قناة ألفا واللوحة وملف تعريف الألوان تبقى كلها سليمة عبر الرحلة الكاملة.
فك ترميز محلي
تُفك حمولة Base64 في متصفحك باستخدام atob(). لا يوجد رفع إلى الخادم، ولا تسجيل لبايتات PNG الخاصة بك.
معاينة مباشرة
شاهد الصورة المفكوكة وأبعادها وحجم الملف التقريبي على الفور قبل التنزيل.
// حول Base64 إلى PNG
ما تقبله هذه الأداة
- >Data URI: data:image/png;base64,iVBORw0KGgo…
- >حمولة PNG Base64 الخام (تبدأ بـ iVBORw0KGgo)
- >Base64 مع مسافات بيضاء / أسطر جديدة مضمّنة
- >أبجدية RFC 4648 القياسية (+/, حشو = اختياري)
- >Base64 الآمن للروابط (-_) — يُطبَّع تلقائيًا عند فك الترميز
- >لصق مدرك لـ Unicode — تتم إزالة علامات BOM
حالات الاستخدام الشائعة
- >حفظ لقطة شاشة من data URI الخاص بمفتش DOM
- >استخراج شعار من خلفية CSS بصيغة data-uri
- >استرداد صورة من استجابة JSON API
- >استعادة صورة من عمود TEXT في قاعدة بيانات
- >استرداد ملف PNG من جزء MIME في بريد إلكتروني
- >فحص أيقونة مضمّنة داخل SVG مضمّن
- >تصحيح وسم <img src="data:image/png;base64,…"> معطّل
كيف يعمل فك ترميز Base64 → PNG
يزيل المفكِّك أي بادئة data URI، ويطبّع المسافات البيضاء والأحرف الآمنة للروابط، ثم يستدعي atob() لتحويل كل مجموعة من 4 أحرف مرة أخرى إلى 3 بايتات ثنائية. تُغلَّف مصفوفة البايتات في Blob بنوع MIME هو image/png، وتُمنح عنوان object URL، وتُعرض في عنصر <img>. ولأن Base64 تقابلية مع الثنائي، فإن الناتج مطابق للبت لملف PNG الأصلي — تتطابق بصمة SHA-256 للملف المفكوك مع الأصل.
مثال على data URI لملف PNG:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==
الأداء والتوافق
- >فك الترميز بتعقيد O(n) بالنسبة لطول الحمولة — يتعامل مع 100 ميجابايت+ دون مشاكل
- >يستخدم atob() الأصلي للمتصفح — دون أي طبقة JS ثقيلة
- >يدعم APNG متعدد الإطارات عندما يدعمه العارض
- >يعمل في جميع المتصفحات الحديثة (Chrome وFirefox وSafari وEdge)
- >معاينة متجاوبة مع الجوال مع التكبير بالقرص
- >يستخدم التنزيل عنوان Blob URL — دون رحلة وسيطة إلى الخادم
// كيفية فك ترميز Base64 إلى PNG
الخطوة 1: اللصق
الصق سلسلة Base64 أو عنوان data URI الكامل في حقل الإدخال
الخطوة 2: فك الترميز
انقر على [DECODE] — يُعرَض ملف PNG في المعاينة على الفور
الخطوة 3: الفحص
تحقق من الأبعاد وحجم الملف وقناة ألفا قبل الحفظ
الخطوة 4: التنزيل
انقر على [DOWNLOAD .png] لحفظ ملف PNG مطابق للبت على القرص
// أمثلة برمجية — Base64 إلى PNG
JavaScript (Browser)
// Decode Base64 → PNG Blob → download link
const b64 = 'iVBORw0KGgoAAAANSUhEUg...';
const bin = atob(b64);
const arr = new Uint8Array(bin.length);
for (let i = 0; i < bin.length; i++) arr[i] = bin.charCodeAt(i);
const blob = new Blob([arr], { type: 'image/png' });
const url = URL.createObjectURL(blob);
window.open(url);
فك ترميز حمولة Base64 خام إلى Blob وفتحها. بالنسبة إلى data URI كامل، يقبله وسم <img> مباشرة.
Node.js
const fs = require('fs');
const b64 = 'iVBORw0KGgoAAAANSUhEUg...';
fs.writeFileSync('out.png', Buffer.from(b64, 'base64'));
سطر واحد باستخدام Buffer المدمج في Node لفك ترميز Base64 وكتابة ملف PNG.
Python
import base64
with open('out.png', 'wb') as f:
f.write(base64.b64decode('iVBORw0KGgoAAAANSUhEUg...'))
المكتبة القياسية فقط — فك ترميز نص Base64 مرة أخرى إلى بايتات PNG.
PHP
<?php
file_put_contents('out.png', base64_decode('iVBORw0KGgoAAAANSUhEUg...'));
سطر واحد باستخدام base64_decode() وfile_put_contents() المدمجَين.
Shell (macOS / Linux)
echo 'iVBORw0KGgoAAAANSUhEUg...' | base64 -d > out.png
يقرأ POSIX base64 -d / -D النص من stdin ويكتب ملف PNG المفكوك إلى stdout.
// الأسئلة الشائعة — Base64 إلى PNG
س: ما هو فك ترميز Base64 إلى PNG؟
ج: يعكس ملف PNG مُرمَّزًا بـ Base64 إلى شكله الثنائي الأصلي. السلسلة التي تلصقها هي 4 أحرف ASCII لكل 3 بايتات ثنائية؛ يقرأ المفكِّك 4 أحرف في كل مرة، ويطبّق بحث أبجدية RFC 4648، ويكتب 3 بايتات لكل مجموعة حتى تنتهي السلسلة. مصفوفة البايتات الناتجة هي ملف PNG كامل وصالح يمكنك معاينته أو حفظه أو إرساله إلى أي مكان يقبل ملف PNG عاديًا.
س: كيف أعرف أن سلسلة Base64 هي بالفعل PNG؟
ج: أول 8 بايتات في كل ملف PNG هي التوقيع السحري 89 50 4E 47 0D 0A 1A 0A. وعند ترميزها بـ Base64، تبدأ هذه البايتات الثمانية دائمًا بـ iVBORw0KGgo. لذا فإن أي سلسلة Base64 تبدأ بـ iVBORw0KGgo هي PNG. الصيغ الأخرى لها بادئات مختلفة: /9j/ هي JPEG، وR0lGOD هي GIF، وUklGR هي WebP. يكتشف مفكِّكنا ملفات PNG تلقائيًا من هذه البادئة السحرية ويعود إلى نوع MIME الموجود في data URI إن وُجد.
س: هل يمكنني لصق data URI أم Base64 الخام فقط؟
ج: كلاهما. إذا بدأت سلسلتك بـ data:image/png;base64,، يزيل المفكِّك البادئة تلقائيًا. وإذا لصقت جزء الحمولة فقط، فإننا نستنتج نوع MIME لـ PNG من البايتات السحرية. تُطبَّع المسافات البيضاء والأسطر الجديدة وأحرف الإرجاع وعلامات الجدولة قبل فك الترميز، حتى تتمكن من لصق استجابة JSON منسَّقة بشكل أنيق دون كسر أي شيء.
س: ملف PNG المفكوك معطّل — لماذا؟
ج: الأسباب الشائعة:
• سلسلة مبتورة — قُطعت Base64 في مكان ما (مثلًا بسبب حد للأسطر في مصدر النسخ). تنتهي Base64 الكاملة لـ PNG بـ RU5ErkJggg== (مقطع IEND)؛ إذا كان مفقودًا، فالملف غير مكتمل.
• الأبجدية الآمنة للروابط — إذا كانت السلسلة تستخدم -_ بدلًا من +/ (base64url)، تطبّعها أداتنا؛ وقد ترفضها مفكِّكات أخرى.
• مُرمَّز مرتين — رُمِّز ملف PNG بـ Base64 مرتين. فك ترميزه مرة أخرى.
• ليس PNG — الحمولة هي في الواقع JPEG أو WebP. استخدم مفكِّك Base64 → صورة العام الذي يكتشف أي صيغة تلقائيًا.
س: هل يفقد فك الترميز إلى PNG أي جودة أو شفافية؟
ج: لا. Base64 تحويل قابل للعكس بِتًا بِتًا. ملف PNG المفكوك مطابق للأصل على مستوى البايت: قناة ألفا، واللوحة (PLTE)، والشفافية (tRNS)، وملف تعريف الألوان (iCCP/sRGB)، وجاما (gAMA)، والأبعاد الفيزيائية للبكسل (pHYs) تبقى كلها سليمة. تتطابق بصمة SHA-256 للملف المفكوك مع بصمة الأصل. وإذا رأيت أي اختلاف، فإن التغيير حدث قبل الترميز، وليس أثناء رحلة Base64 الكاملة.
س: هل يمكنني فك ترميز Base64 إلى PNG باستخدام الطرفية؟
ج: نعم. على macOS وLinux: echo 'iVBORw0KGgo…' | base64 -d > out.png
(يستخدم macOS -D في الإصدارات الأقدم.)
على Windows PowerShell: [IO.File]::WriteAllBytes('out.png', [Convert]::FromBase64String('iVBORw0KGgo…'))
إذا كانت السلسلة عنوان data URI كاملًا، فأزل أولًا البادئة data:image/png;base64, (تقبل معظم الأصداف sed 's|^data:.*base64,||').
س: ما الحجم الأقصى لإدخال Base64 PNG؟
ج: نحن نفك الترميز في المتصفح، لذا فإن الحد هو ذاكرة جهازك — بكل أريحية 100 ميجابايت+ على الحاسوب المكتبي. ملف PNG مفكوك بحجم 100 ميجابايت يحتاج إلى نحو 135 ميجابايت من نص Base64، وهو ما تلصقه معظم المتصفحات دون شكوى. إذا كنت تعمل مع ملفات PNG علمية أو طبية كبيرة جدًا، ففكّر في فك الترميز من جانب الخادم بدلًا من ذلك، لأن أداء atob() في المتصفح يتدهور قرب سقف الذاكرة.
س: هل يعمل هذا المفكِّك دون اتصال بالإنترنت؟
ج: نعم. يستخدم كل فك الترميز واجهات atob() + Uint8Array + Blob الأصلية، المدمجة في كل متصفح حديث. بعد تحميل الصفحة مرة واحدة، يمكنك قطع الاتصال بالشبكة ومتابعة فك الترميز. لا خدمات خارجية، ولا رحلة إلى الخادم، ولا تحليلات على حمولة صورتك.
س: ما الفرق بين PNG بصيغة Base64 وملف PNG عادي؟
ج: يحتويان على البايتات نفسها تمامًا. ملف .png العادي هو الثنائي الخام؛ وسلسلة PNG بصيغة Base64 هي الثنائي نفسه مُعاد كتابته بأبجدية ASCII المؤلفة من 64 حرفًا. صيغة Base64 أكبر بنسبة 33% لكنها آمنة لإدراجها في سمات HTML وسلاسل JSON ودوال url() في CSS ورسائل البريد الإلكتروني. لا يمكنك وضع بايتات PNG خام في HTML — فهي تحتوي على بايتات صفرية وأحرف ذات بت عالٍ تكسر محلِّلات النصوص. وBase64 هي الحل البديل.
س: هل يُحمَّل PNG بصيغة Base64 أسرع من ملف .png منفصل؟
ج: فقط للصور الصغيرة جدًا. توفّر Base64 رحلة HTTP واحدة، قد تستغرق 50–100 مللي ثانية على اتصال جديد — مفيد لأيقونات الواجهة الحرجة الأقل من 4 كيلوبايت. لأي شيء أكبر، يفوز ملف .png منفصل يُقدَّم بترويسات تخزين مؤقت طويلة الأمد في معظم الأحيان لأن (أ) gzip يضغط نص Base64 بشكل سيئ، و(ب) لا يمكن تخزين عناوين data URI في الذاكرة المؤقتة بشكل مستقل، و(ج) أنها تعيق تحليل HTML. استخدم Base64 للأصول الصغيرة فوق الطية، وليس للصور الرئيسية.
س: هل يمكنني فك ترميز Base64 إلى PNG دون رفع البيانات إلى أي مكان؟
ج: نعم — تعمل هذه الأداة 100% من جانب العميل. تُفك سلسلة Base64 الخاصة بك في JavaScript على جهازك، وتُغلَّف في Blob محليًا، وتُعرَض عبر URL.createObjectURL(). لا يُرفَع أي شيء. يمكنك التحقق من ذلك بفتح علامة تبويب الشبكة في أدوات مطوري المتصفح أثناء فك الترميز — لا تُرسَل أي طلبات. كما أن تشغيل التدفق بالكامل دون اتصال (وضع الطيران) يعمل أيضًا بعد التحميل الأولي للصفحة.
س: كيف أفك ترميز Base64 إلى PNG في كود الإنتاج؟
ج: في Node.js: fs.writeFileSync('out.png', Buffer.from(b64, 'base64')). في Python: open('out.png','wb').write(base64.b64decode(b64)). في Go: b, _ := base64.StdEncoding.DecodeString(b64); os.WriteFile("out.png", b, 0644). في Java: Files.write(Path.of("out.png"), Base64.getDecoder().decode(b64)). في Rust: std::fs::write("out.png", base64::decode(b64)?)?. في PHP: file_put_contents('out.png', base64_decode($b64)). تأتي المكتبة القياسية لكل بيئة تشغيل مع مفكِّك Base64 — نادرًا ما تحتاج إلى اعتمادية خارجية.
س: Base64 إلى PNG مقابل Base64 إلى JPG — أي مفكِّك ينبغي أن أستخدم؟
ج: استخدم Base64 → PNG عندما تبدأ سلسلة Base64 بـ iVBORw0KGgo (أو يقول data URI data:image/png;base64,). استخدم Base64 → JPG عندما تبدأ السلسلة بـ /9j/4AAQ أو /9j/2wC. إذا لم تكن متأكدًا، فاستخدم مفكِّك Base64 → صورة العام الذي يفحص البايتات السحرية ويختار الصيغة الصحيحة تلقائيًا. لا تفرض أبدًا صيغة لا تطابق الحمولة — فالملف المفكوك سيكون بايتات صالحة لكن غير قابلة للقراءة.