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

السؤال

نشر (معدل)

السيرفر الخاص بي يعمل على 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...