اذهب إلى المحتوى
  • 0

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

محمد هاني3

السؤال

السيرفر الخاص بي يعمل على 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
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 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');
});

 

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...