لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 10/26/21 في كل الموقع
-
نعم يمكن، أولا نحدد الجدول الذي نريد الحذف منه، ثم نكت استعلام يعبر عن النتيجة المرغوب حذفها. مثلا لنحذف من الجدول A الأسطر التي ليس لها مقابل في الجدول B DELETE FROM Table_A -- تحديد الجدول الذي نريد الحذف منه -- بداية الاستعلام الجزئي FROM Table_A LEFT OUTER JOIN Table_B ON Table_A.Column_1 = Table_B.Column_2 -- شرط الدمج WHERE TableB.Column IS NULL -- لايوجد مقابل للسطر في جدول A لاحظ تكرار عبارة FROM.2 نقاط
-
عندما اقوم بتنفيذ بمحاولة رفع بعض الملفات على github يقوم بطلب الباسوورد والاميل , عند ادخالهم تأتيني تلك الرسالة remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead1 نقطة
-
السلام عليكم ماهي متطلبات تعلم xamarin.forms مع العلم اني استطيع البرمجة بلغة سي شارب وكذاك انشاء تطبيقات سطح المكتب عن طريق wpf الرجاء الافادة وشكرا1 نقطة
-
ما هي الطرق التي تمكنني من عمل حذف من جدول بناءً على استعلام جزئي؟ أريد مثلاً للتوضيح1 نقطة
-
النظام الذي متوفر لدي لينكس هل هنالك طريقه له1 نقطة
-
اذا طلب منى عميل او شركة تصميم موقع مثل موقع للاستيراد والتصدير او موقع لإيجار السيارات مثلا كيف يمكننى تسعيره وكيف اتعامل مع الشركة لأقنعه بمنتجى هل اكون صريح معه بكل تفصيله واقترح عليه اضافات ام لا1 نقطة
-
أحاول وضع هذا النص ' Yesterday I was clever.. \n so I wanted to change the world ' على الصورة من خلال الدالة putText، لكن عند عرض الصورة يظهر هكذا ' Yesterday I was clever.. ? so I wanted to change the world ' لكن كنت أتوقع أن تتم طباعة "so I wanted to change the world" في السطر الجديد لكن لم يتم التعرف على ال n\ فما المشكلة؟ هذا هو الكود: import cv2 # قراءة الصورة image = cv2.imread("/content/test.jpg") # الخط font = cv2.FONT_HERSHEY_SIMPLEX # الإحداثيات org = (100, 50) # fontScale fontScale = 1 # red color in BGR color = (0, 0, 255) # السماكة thickness = 2 # استخدام cv2.putText() image = cv2.putText(image, 'Yesterday I was clever.. \n so I wanted to change the world.', org, font, fontScale, color, thickness, cv2.LINE_AA) # عرض cv2.imshow(window_name, image) cv2.waitKey(0) cv2.destroyAllWindows()1 نقطة
-
انا اتعلم flutterعندما اقوم بإضافة المتغيير يعطيني خطأ The argument type 'List<dynamic>' can't be assigned to the parameter type 'List<Widget>' كلما حاولت تغيير الList<dynamic>اليList<Widget>لااستطيع وها هو كودى import 'package:flutter/material.dart'; void main() { runApp(const EkhtbarApp()); } class EkhtbarApp extends StatelessWidget { const EkhtbarApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( backgroundColor: Colors.orange[100], appBar: AppBar( // ignore_for_file: prefer_const_constructors backgroundColor: Colors.brown[600], title: Text("اختر الإجابة الصحيحة"), ), body: Padding( padding: const EdgeInsets.all(20.0), child: Esst(), ), ), ); } } class Esst extends StatefulWidget { const Esst({Key? key}) : super(key: key); @override _EsstState createState() => _EsstState(); } class _EsstState extends State<Esst> { List fafa = [ Padding( padding: const EdgeInsets.all(3.0), child: Icon( Icons.thumb_up, color: Colors.lightGreen[400], ), ), Padding( padding: const EdgeInsets.all(3.0), child: Icon( Icons.thumb_down, color: Colors.red[600], ), ), Padding( padding: const EdgeInsets.all(3.0), child: Icon( Icons.thumb_up, color: Colors.lightGreen[400], ), ), Padding( padding: const EdgeInsets.all(3.0), child: Icon( Icons.thumb_down, color: Colors.red[600], ), ), ]; @override Widget build(BuildContext context) { return Column( children: [ ،،هنا هى المشكلة Row(children:fafa, ), Expanded( flex: 5, child: Column( children: [ Image.asset("images/000.jpg"), SizedBox( height: 5.0, ), Text( "الشخصية في الصورة من كرتون المهند", textAlign: TextAlign.center, style: TextStyle(fontSize: 24.0), ), ], ), ), Expanded( child: Row( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Padding( padding: const EdgeInsets.all(20.0), child: TextButton( onPressed: () { // Pop here with "صح"... }, child: const Text( 'صح', style: TextStyle(color: Colors.white), ), style: ButtonStyle( backgroundColor: MaterialStateProperty.all(Colors.lightGreen[400]), fixedSize: MaterialStateProperty.all(Size.fromWidth(200)), ), ), ), Padding( padding: const EdgeInsets.all(20.0), child: Expanded( child: TextButton( onPressed: () { // Pop here with "خطأ"... }, child: const Text( 'خطأ', style: TextStyle(color: Colors.white), ), style: ButtonStyle( backgroundColor: MaterialStateProperty.all(Colors.red[600]), fixedSize: MaterialStateProperty.all(Size.fromWidth(200)), ), ), ), ), ], ), ), ], ); } }1 نقطة
-
الصور يتم تخزينها الاسم والامتدادا كما بالصورة1 نقطة
-
استخدم مكتبة Pandas لتمثيل بياناتي بشكل رسومي. كيف يمكننا تسمية المحاور؟ مثلاً في الكود التالي: import numpy as np import pandas as pd # إنشاء داتافريم مكون من عمودين d = {'col_1' : np.arange(20), 'col_2' : np.arange(20,60,2)**8} df = pd.DataFrame(d) # تمثيلهما بيانياً df.plot(x='col_1', y='col_2', style='-') والنتيجة: الآن أريد أن أضع تسميات للمحاور. كيف نقوم بذلك؟1 نقطة
-
لدي الكود التالي: import matplotlib.pyplot as plt import numpy as np x = np.linspace(-10, 10, 1000) f=x**2+30 plt.plot(x, f, label="Gradient descent") i = 0 j = 30 plt.plot(i, j, "ko",color="red", label="Global Optimum") plt.xlabel("X") plt.ylabel("Y") plt.show() والنتيجة: المشكلة أنني لا أريد أن تظهر نقطتين ضمن ال legend وإنما أريد نقطة واحدة فقط. كيف نقوم بذلك؟1 نقطة
-
يعني هذا عدم تماثل بعض النتائج من قاعدة البيانات و الملفات , يحتمل أنك تقوم بتخزين اسم المجلد في قواعد البيانات أيضا . هلا تأكدت من أن الصور تظهر كالتالي في قاعدة البيانات : img1.jpg img2.jpg و ليس كـ : images/profile/img1.jpg images/profile/img2.jpg1 نقطة
-
السلام عليكم عندي مشكلة جربت الكثير من اكواد تحميل الصوره الى مجلد في الجهاز لاكن لم يضبط اي كود منهم هل لنظام ماك طريقة خاصة ؟ استخدم XAMPP الكود : <?php error_reporting(0); ?> <?php $host = "localhost:3306"; $dbUsername = "root"; $dbPassword = ""; $dbname = "photos"; $db = mysqli_connect($host, $dbUsername, $dbPassword, $dbname); if (!$db) { die("Connection failed: " .mysqli_connect_error()); } $msg = ""; // If upload button is clicked ... if (isset($_POST['upload']) && isset($_FILES['uploadfile'])){ $category=$_POST['category']; $img_name = $_FILES['uploadfile']['name']; //getting user uploaded name $img_type = $_FILES['uploadfile']['type']; //getting user uploaded img type $tmp_name = $_FILES['uploadfile']['tmp_name']; //this temporary name is used to save/move file in our folder. // let's explode image and get the last name(extension) like jpg, png $img_explode = explode(".",$img_name); $img_ext = end($img_explode); //here we get the extension of an user uploaded img file $extension= ['png','jpeg','jpg','gif']; // Get the name of images $Get_image_name = $_FILES['uploadfile']['name']; // image Path $image_Path = "sora/".basename($Get_image_name); $sql = "INSERT INTO image (filename, category) VALUES ('$Get_image_name', '$category')"; // Run SQL query mysqli_query($db, $sql); if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $image_Path)) { echo "Your Image uploaded successfully"; }else{ echo "Not Insert Image"; } } ?> <!DOCTYPE html> <html> <head> <title>Image Upload</title> <form method="POST" action="" enctype="multipart/form-data"> <table> <tr> <td>Theme image</td> <td> <input type="file" name="uploadfile" value=""/> </td> </tr> <tr> <td>Theme category</td> <td> <select name="category"> <option value="">...</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> </td> </tr> <tr> <td> <button type="submit" name="upload">UPLOAD</button> </td> </tr> </table> </form> </body> </html>1 نقطة
-
من الممكن أن يكون السبب في ذلك هو مسار الصور, جرب أن تكتب المصار بالشكل التالي $_SERVER['DOCUMENT_ROOT']."المسار بالنسبة لمجلد الhtdocs" حيث أن العنصر DOCUMENT_ROOT في المصفوفة $_SERVER تحتوي على المسار الخاص بالخادم إن لم يعمل برجاء التأكد من الصﻻحيات يمكنك التأكد من أن المشكلة ليست من الصﻻحيات عن طريق الذهاب إلى مجلد الصور وتقوم بالتالي file > Right click > Get info ومن ثم جعل الصﻻحيات read&write ومن ثم تجربة الملف مرة أخرى1 نقطة
-
قمت بذلك لكن يتم حذف الصورة من المجلد uploads/profile بالرغم من ان الصورة لها مسار مخزن في القاعدة - المفترض ان يحذف فقط الصور التي ليس لها مسار مخزن في القاعدة ويترك باقي الصور من فضلك الق نظرة اخرى على الكود ربما به خطأ وهو كالتالي <?php // حذف الصور القديمة للمستخدم ولا فائدة منها // تحديد كامل مسارات الصور من قواعد البيانات من الجدول المستهدف و تخزينها في مصفوفة . $sql = 'SELECT image_profile_path from accounts'; $result = mysqli_query($db,$sql); $db_imgs = []; while($row = mysqli_fetch_array($result)) { $db_imgs[] = $row['image_profile_path']; } // تحديد كامل مسارات الصور داخل المجلد المستهدف و تخزينها في مصفوفة . $targetDirectory = "uploads/profile/"; $stored_imgs = glob($targetDirectory . "*.jpg"); // تحديد العناصر الغير متوفرة في كلتا المصفوفتين . $targetImages = array_diff($stored_imgs,$db_imgs); // حذفها هاته العناصر foreach($targetImages as $image) { unlink($image); } ?>1 نقطة
-
1 نقطة
-
ملفات docker compose تعد جزءًا من أداة تسمى docker-compose إنه تطبيق عميل لخادم docker daemon يشبه نوعًا ما عميل Docker CLI ولكن بدلاً من كتابة أوامر التشغيل بالكامل في كل مرة باستخدام docker-compose يمكنك إعادة استخدام ملف YAML نفسه مرارًا وتكرارًا ونشر نفس الحاوية بنفس التكوين كما فعلت في المرة الأولى. إنه أكثر قابلية للقراءة وأكثر قابلية للصيانة وأكثر سهولة يمكن أن يحتوي ملف الإنشاء الفردي على تكوينات متعددة لنشر الحاوية. بينما Dockerfile هو ملف نصي بسيط يحتوي على الأوامر التي يمكن للمستخدم الاتصال بها لتجميع صورة و يحتوي ملف Dockerfile النموذجي على تعليمات بناء خاصة وأوامر مثل RUN و ADD و COPY و ENTRYPOINT وما إلى ذلك.1 نقطة
-
1 نقطة
-
على الرغم من أن Kubernetes و Docker هما تقنيتان مختلفتان إلا أنهما مكملتان للغاية وتشكلان مزيجًا قويًا يوفر Docker الحاوية التي تتيح للمطورين حزم التطبيقات بسهولة في حاويات صغيرة ومعزولة عبر سطر الأوامر يمكن للمطورين بعد ذلك تشغيل هذه التطبيقات عبر بيئة تكنولوجيا المعلومات الخاصة بهم دون الحاجة إلى القلق بشأن مشكلات التوافق إذا تم تشغيل أحد التطبيقات على عقدة واحدة أثناء الاختبار فسيتم تشغيله في أي مكان. عند زيادة الطلب يوفر Kubernetes تنسيقًا لحاويات Docker وجدولتها ونشرها تلقائيًا عبر بيئات تكنولوجيا المعلومات لضمان التوافر العالي بالإضافة إلى تشغيل الحاويات يوفر Kubernetes مزايا موازنة الحمل والشفاء الذاتي وعمليات الطرح والتراجع المؤتمتة بالإضافة إلى ذلك يحتوي على واجهة مستخدم رسومية لسهولة الاستخدام.1 نقطة
-
linear system ايشلون كيف اسوي تصفير ايش فكرتها تعبت ابي افهم كيف هو يصفر عل اي اساس كيف اسوي كدا ابي احد يفهمني1 نقطة
-
الأمر مشابه لعملية جمع المعادلات ولكن يتم وضعها بمصفوفة بغرض التسهيل والتنظيم وسهولة العمليات على المصفوفة فبدلاً من كتابة x + 2 - 2z + 4t = 5 2x + 2y - 3z + t = 3 3x + 3y - 4z - 2t = 1 نقوم بكتابة معاملات المعادلات بداخل مصفوفة [ 1 1 -2 4 5 2 2 -3 1 3 3 3 -4 -2 1 ] نعلم أننا ﻻ يمكننا حل معادلة بها أكثر من متغير, فنحاول هنا أن نقوم بجمع المعادلات حتى نحصل على معادلة تحتوي على متغير واحد فقط لنعثر على قيمته, وللحصول على معادلة على هذه الشاكلة نحتاج إلى جعل معاملات باقي المتغيرات بصفر, وﻻيمكننا أن نقوم بتصفيرهم من العدم, يجب أن نجمع المعادلات معاً بشكل رياضي صحيح حتى نحصل على الصورة الصفرية(جميع المعاملات بصفر عدا معامل واحد من المتغيرات) إن ﻻحظت أول معادلتين إن قمنا بضرب أول معادلة *-2 ومن ثم جمعناها على أول معادلة ستكون بالشكل التالي -2*(x + y -2z + 4t)=5*2(كما تﻻحظ يجب ضرب ماقبل اليساوي في نفس العدد بعد عﻻم اليساوي حتى تكون المعادلة صحيحة رياضياً) بعد الضرب تصبح المعادلة -2x -2y +4z -8t = -10 نقوم بجمعها على المعادلة الثانية -2x +2x +2y -2y +4z -3z -8t +t=-10 +3 = 0x +0y +z -7t = -7 نقوم بعد ذلك بالتفكير ومحاولة رؤية معادلات نجمعها تعطي أصفار في المعاملات, سنجد أن حاصل ضرب المعادلة الأولى في 3 مجموعة على المعادلة الثالثة ستعطينا إصفار للمعادلة الثالثة -3*(x + y - 2z + 4t) = 3*-5 =-3x - 3y + 6z - 12t = -15 نجمعها على المعادلة الثالثة -3x + 3x -3y + 3y 6z -4z -12t -2t =-15 +1 = 0x +0y +2z -14t = -14 نﻻحظ أن المعادلات الثانية والثالثة بهما الx وال y بصفر نقوم بتنفيذ تلك الخطوات وتكرارها حتى نحصل على معادلة لا تحتوي إلا على معامل واحد وباقي المتغيرات بصفر لنستطيع مساواة قيمة المتغير بالقيمة التي بعد عﻻمة المساواة ولكن بدلاً من كتابتها على هيئة معادلات نقوم بكتابتها على هيئة مصفوفة1 نقطة
-
docker هو حاوية, أي أنها تعمل كنظام تشغيل وهمي أو بيئة عمل يتم وضع المشروع بها حتى يتم التأكد من أن المشروع يعمل على نفس بيئة العمل ونفس الإعدادات عند كل المستخدمين فﻻ يحتاج أحد أن يُعدل في بيئة عمله لتتوافق مع المشروع بينما Kubernetes هو أداة لإدارة الحاويات وتنفيذ عمليات تلقائية عليها بشكل أوتوماتيك مثل النشر( deployment) والتشغيل1 نقطة
-
Dockerfile هو ملف نصي عادي، يحوي الأوامر التي تمكن المستخدم من تجميع image والتي هي بنية الحاوية نفسها أي فعلياً اسم وإصدار نظام التشغيل مع الأدوات البرمجية والمكتبات وبيئات العمل المطلوبة لعمل التطبيق. مثال لتنصيب nginx مع PHP لمشروع ما: FROM nginx:latest MAINTAINER wael wael@hsoub RUN apt-get -y update && apt-get -y upgrade && apt-get install -y php أما docker-compose هي أداة لتعريف و تشغيل تطبيق متعدد الحاويات، يتم من خلاله تعريف الخدمات التي ستعمل في بيئة منعزلة والسماح بتشغيل التطبيق من خلال أمر واحد docker-compose up مثال لضبط إعداد mysql: تحديد الخدمات للتطبيق تحديد منفذ كل خدمة تحديد معلومات البيئة تحديد أي صورة خدمة سنعمل بها version: '3' services: back_end: ports: - "8080:80" db: image: mysql ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=root-password - MYSQL_USER=wael - MYSQL_PASSWORD=wael-password - MYSQL_DATABASE=my-database1 نقطة
-
عندما أطلب رابط الموثع يظهر رقم المنفذ port number في نهاية الرابط url كيف أستطيع إخفاءه؟1 نقطة
-
يمكن إضافة للبنة server إعداد port_in_redirect بقيمة off كالتالي server { listen 80; server_name localhost; port_in_redirect off; } وإن كنت تستخدم proxy أضف: server_name_in_redirect off; proxy_set_header Host $host:$server_port; => server { listen 80; server_name mySite.com; server_name_in_redirect off; proxy_set_header Host $host:$server_port; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080; } access_log off; }1 نقطة
-
يمكن استخدام SubQuery مع المعامل except لجلب القيم في الجدول الأول وتجنبها في الآخر. الاستعلام الجزئي في المثال التالي سيجلب الأسطر التي لها id في الجدول A وليس لها مقابل في B delete from Table_A where id in ( select id from Table_A except select id from Table_B ) أو يمكن استعمال المعامل Not IN حيث سنحذف كل سطر من A ليس له id في B DELETE FROM Table_A AS A Where A.id not in ( Select B.Tabale_A_Id From Table_B As B ) كما يمكن استخدام Not EXISTS هنا سيتم مقابلة سطر بسطر وحذف السطر الذي ليس له مقابل DELETE FROM Table_A WHERE Not EXISTS ( SELECT * FROM Table_B As B Where B.Table_A_Id = Table_A.Id )1 نقطة
-
يمكننا عمل الربط بناءً على رقم المجلد الذي يحوي الملف، وأيضا علينا عمل تجميع حسب المجلد، وفي هذه الحالة يمكن استخدام Count والتي سوف تعمل على كل جدول جزئي (لكل مجلد) وتحسب عدد الملفات ضمنه SELECT fol.name, fol.path, fol.id, COUNT(fil.*) as #files -- حساب عدد الملفات الجزئي في المجلد FROM folders fol LEFT JOIN files fil ON fol.ID=fil.folderID -- عمل الربط WHERE userId = root -- عمل فلترة حسب مالك الملف GROUP BY folders.ID -- عمل تجميع حسب رقم المجلد1 نقطة
-
تقوم الشيفرة الموصوفة بحذف كل من : الصور المخزن مساراتها في قواعد البيانات و التي لا تتوفر على مسار فعلي في نظام الملفات. الصور المتوفرة في نظام الملفات و ليس لها توفر في قواعد البيانات . يمكنك استثناء الإحتمال الأول بالتخلص تماما من فكرة مزج مصفوفتي : ناتج فرق المصفوفة الاولى و الثانية . ناتج فرق المصفوفة الثانية و الأولى . وذلك عن طريق السطر المعني ليصبح كالتالي : $targetImages = array_diff($stored_imgs, $db_imgs);1 نقطة
-
مفهوم Redis: Redis هو عبارة عن مخزن مفتوح المصدر يُستعمل لتخزين البيانات على شكل أزواج من مفتاح-قيمة Key-Value في الذاكرة الرئيسية In-Memory، حيث Key-Value storage عبارة عن نظام تخزين يتم فيه تخزين البيانات على شكل أزواج من المفاتيح والقيم ، تخزّن هذه الأزواج في الذاكرة الرئيسية RAM وهذا ما نقصده بـ In-Memory وبهذا يمكننا القول أن تقنية Redis تخزن البيانات في الذاكرة الرئيسية على شكل أزواج من المفاتيح والقيم. يكون المفتاح في هذه التقنية عبارة عن سلسلة نصية String، أما القيمة فيمكن أن تكون سلسلة محارف String أو قائمة List أو مزيج منهما. يُمكن استخدام Redis إمّا كخادوم قاعدة بيانات لوحده أو مرتبطًا مع قاعدة بيانات أخرى مثل MySQL. خطوات تثبيت Redis على أوبنتو: إعداد بيئة ومتطلبات Redis نقوم في البداية بتحديث جميع حزم apt-get: sudo apt-get update بعد ذلك نقوم بتحميل مُترجم (compiler) باستخدام الحزمة build-essential، والّتي من شأنها المساعدة في تنصيب Redis من المصدر: sudo apt-get install build-essential سنقوم بعدها بتحميل الأداة tcl الّتي يَعتمد عليها Redis: sudo apt-get install tcl8.5 تنصيب Redis: بعد أنّ تمّ تنصيب المُتطلّبات الأساسيّة، فمن المُمكن الآن الشروع وتنصيب redis، ويُمكن تحديد الإصدار المطلوب أو تحميل الإصدار الأخير والذي سيحمل دائمًا الاسم redis-stable: wget http://download.redis.io/redis-stable.tar.gz يجب بعد ذلك فك ضغط الملفّ والانتقال إليه: tar xvzf redis-stable.tar.gz cd redis-stable ثم المتابعة بتنفيذ الامر: make make ولتنصيب Redis على كامل النّظام، فيُمكن إما نسخ ملفاته من المصدر: sudo cp src/redis-server /usr/local/bin/ sudo cp src/redis-cli /usr/local/bin/ أو تنفيذ الأمر التّالي: sudo make install بعد انتهاء عمليّة التنصيب، من المُستحسن تشغيل Redis كحارس (daemon) في خلفيّة النّظام، ولعمل ذلك يأتي Redis بملفّ برمجي (سكريبت) لهذه المُهمّة. يجب الانتقال إلى المسار utils للوصول إلى هذا الملفّ: cd utils ومن ثم تشغيل الملفّ الخاص بتوزيعات Ubuntu/Debian: sudo ./install_server.sh سيَعرض السكريبت بعض الأسئلة لإتمام عمليّة التهيئة، ولكن يُمكن الاعتماد على الإعداد الافتراضي والاكتفاء بالضغط على Enter، وبعد انتهاء عملية التهيئة سيكون خادم Redis يعمل في الخلفيّة (background). يُمكن تنفيذ الأمر التّالي للوصول إلى قاعدة البيانات Redis: redis-cli يُمكن اختبار Redis كالتّالي: λ redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name hsoub OK 127.0.0.1:6379> get name "hsoub" 127.0.0.1:6379> بإمكانك المتابعة مع المقال التالي: الذي يشرح كيفية التثبيت بشكل مفصل و الإطلاع على بقية أوامر Redis.1 نقطة
-
يمكنك استخدام الدالة putText: cv2.putText(image, text, org, font, fontScale, color, thickness, lineType, bottomLeftOrigin) الوسيط الأول هو الصورة المطلوب وضع النص عليها، أما الوسيط الثاني فهو النص المطلوب وضعه، أما الوسيط الثاني فهي إحداثيات الركن الأيسر السفلي من السلسلة النصية في الصورة. يتم تمثيل الإحداثيات على شكل مجموعات من قيمتين، أي (قيمة إحداثي x، قيمة إحداثي y). أما font فيشير إلى نوع الخط. بعض أنواع الخطوط: FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN. أما الوسيط fontScale فهو عامل مقياس الخط الذي يتم ضربه في الحجم الأساسي الخاص بالخط. أما الوسيط color فهو يمثل لونها. أما الوسيط thickness فيمثل سماكة الخط بالبكسل. أما lineType فهذه معلمة اختيارية تعطي نوع الخط الذي سيتم استخدامه. أما آخر وسيط فهو وسيطة اختيارية. عندما تفعله True، يكون أصل بيانات الصورة في الزاوية اليسرى السفلية. خلاف ذلك ، يكون في الزاوية العلوية اليسرى. مثال: import cv2 # قراءة الصورة image = cv2.imread(r'C:\Users\Windows.10\Desktop\All\test5 openeye.jpg') # اسم النافذة التي يتم عرض الصورة فيها window_name = 'Image' # الخط font = cv2.FONT_HERSHEY_SIMPLEX # الإحداثيات org = (100, 50) # fontScale fontScale = 1 # red color in BGR color = (0, 0, 255) # السماكة thickness = 2 # استخدام cv2.putText() image = cv2.putText(image, 'OpenCV', org, font, fontScale, color, thickness, cv2.LINE_AA) # عرض cv2.imshow(window_name, image) cv2.waitKey(0) cv2.destroyAllWindows()1 نقطة