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

السؤال

نشر

لدي سكريبت بايثون يقوم ببعض عمليات المعالجة على صورة ما وتوليد ألوان محددة ثم أريد أن أقوم بجلب الصورة من السكريبت إلى لارافيل ضمن المتحكم الخاص بذلك.

قرأت عن استخدام process في لارافيل، لكن نجحت فقط باستدعاء السكريبت لم أتمكن من جلب الصورة أو محتوى السكريبت إلى لارافيل.

public function newImage()
{
    $process = new Process('python3 /docuemnts/shell.py');
    $process->run();

}

فكيف يمكنني جلب الصورة بعد إنشائها أو معالجتها ضمن بايثون إلى لارافيل؟

Recommended Posts

  • 1
نشر

يجب ترميز الملف (الصورة) بالصيغة base64 وطباعته في shell قبل نقله إلى لارافيل، ثم يتم فك الترميز base64 في لارافيل.

فبفرض لديك السكريبت التالي في بايثون:

import base64
from io import BytesIO

from PIL import Image, ImageDraw
background = Image.new('RGBA', (500, 500))
d = ImageDraw.Draw(background)
d.text((10, 10), "Hello World", fill=(255, 255, 0))
imgByteArr = BytesIO()
background.save(imgByteArr, format='PNG')
imgByteArr = base64.b64encode(imgByteArr.getvalue()) --> يتم هنا الترميز في base64 قبل الطباعة
print(imgByteArr)

ثم في لارافيل يتم استدعاء process وانتظار انتهاء تنفيذ السكريبت واختبار حدوث أي خطأ أثناء التنفيذ عن طريق استخدام  process->isSuccessful كالتالي:

public function newImage()
{
    $process = new Process('python3 /path-to-script/shell.py');
    $process->run();
    if ( ! $process->isSuccessful())
    {
        return abort(404);
    }

    return response(base64_decode(str_replace_first('b', '', $process->getOutput())))->header('Content-Type', 'image/png');

}

حيث يتم استخدام base64_decode لفك الترميز ونمرر له القيمة الناتجة من تنفيذ السكريبت السابق عن طريق  process->getOutput وأخيراً يجب إضافة الترويسة المناسبة لنمط الملف، في حال (صورة) يكون image/png.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...