• 0

حفظ base64 لصورة في Node.js

السيرفر الخاص بي يعمل على Node.js ويتم إستقبال صوره بتشفير base64

data:image/jpeg;base64,/9j/4QCcRXhpZgAASUkqAAgAAAA ... CiiigD//Z

هذه البيانات التي يتم إستقبالها من المفترض أن يتم حفظها على شكل صورة بصيغة jpg وبالتالي أستخدم Buffer  و FileSystemWriter لتحقيق ذلك

var imageBuffer = new Buffer(data, 'base64'); 
fs.writeFile("test.jpg", imageBuffer, function(err) {});

ولكن عند فتح ملف الصورة الناتجة بأي برنامج يظهر خطأ File is damaged or too big

على الرغم من عدم حدوث أي أخطاء أثناء العمليه فما الحل ؟

تمّ تعديل بواسطة محمد هاني3
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

على حسب علمي فانه يجب ان تقوم بإزالة data:image/jpeg;base64, من الصورة حتى يتم كتابتها بالشكل الصحيح و من هذه المعلومات يمكنك حفظ نوع الصورة  و لكن باقي البيانات هي المعلومات المهمة لكتابة صورة على شكل ملف   لذلك يمكنك ازالة هذه الباينات بالطريقة التالية وبعد ذلك يمكنك حفظها كما فعلت سابقا

// هنا تقوم بلزالة هذه البانات من الصورة 
var base64Data = req.rawBody.replace(/^data:image\/png;base64,/, "");

 

تمّ تعديل بواسطة Nuhla Almasri

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

قبل استخدام data نحتاج لاقتطاع الجزء الأول منها لأنه يمثل تريمز البيانات وليس جزءاً من البيانات فعليا.

يمكنك استخدام الشيفرة التالية:

let data = 'data:image/jpeg;base64,ABCDEEgoAAAANSUhEUgAAA..kJggg==';

// شيفرة لاستقبال سلسلة البيانات و فصل البيانات من نمطها
function decodeBase64Image(dataString) {
  var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/),
    response = {};

  if (matches.length !== 3) {
    return new Error('بيانات غير صالحة');
  }

  response.type = matches[1]; // type هنا نمط البيانات
  response.data = new Buffer(matches[2], 'base64'); // هنا البياناتا لفعلية
 
  return response;
}

var imageBuffer = decodeBase64Image(data);
console.log(imageBuffer);

أضف الشيفرة السابقة لتعديل قيمة سلسلة البيانات قبل تمريرها ل writeFile.

كما أن الاستدعاء سيصبح كالتالي:

fs.writeFile('test.jpg', imageBuffer.data, function(err) { ... });
                        ^^^^^^^^^^^^^^^^^^

لاحظ: imageBuffer.data

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

ببساطة يكون في بداية تشفير base64 للصورة مثل الآتي

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...

ويمكنك أن تقوم بإستخدام كود بسيط لإزالة الكود الذي لا ينتمي للصورة كالآتي

let base64String = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA'; // ليست صورة حقيقية

// حذف الرأس الذي لا يتنمي للصورة
let base64Image = base64String.split(';base64,').pop();

والآن يمكن حفظ الصورة في ملف بكل سهولة

import fs from 'fs';

fs.writeFile('image.png', base64Image, {encoding: 'base64'}, function(err) {
    console.log('Image created');
});

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن