تحدثت آخر مرة عن طريقة رسم بسيطة تتجنب GD، ثم استخدمت GD لرسم أبسط "رسم" - وهو خط مستقيم.
هذه المرة سأستمر في رسم خط مستقيم للأسفل. الأجزاء التي تم شرحها بالتفصيل في الكود الأخير لن تتكرر هذه المرة.
<؟
Header("نوع المحتوى: صورة/png");
$im = ImageCreate (200, 100);
$col_black = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
// دعونا نستخدم اللون البرتقالي اليوم.
// نفس استخدام دالة imageline تمامًا،
ImageDashedLine($im,0,100,199,100,$col_orn);
// هذا يرسم خطًا منقطًا.
// لنجري اختبارًا أدناه. تستخدم لتوضيح مشكلة.
$col_yel = ImageColorAllocate($im, 255,255,0);
//أصفر.
ImageLine($im,0,99,199,99,$col_yel);
// ارسم خطًا أصفر على الحافة السفلية للصورة.
ImageLine($im,200,0,200,100,$col_orn);
// حاولت رسم خط برتقالي في أقصى الحافة اليمنى للصورة، لكن لم يحدث شيء.
// يوضح هذا أن النطاق الإحداثي للصورة التي يبلغ عرضها 200 وارتفاعها 100 هو (0,0) إلى (199,99).
ImagePNG($im);
ImageDestroy($im);
// لننهي هذا القسم أولاً.
?>
التأثير القادم سيكون عظيما! أنا أيضًا أتعلم الآن وأبيع الآن. يضيف الإصدار PHP 4.0.6 والإصدارات الأحدث هذا الاستخدام - حيث يمكنك رسم خطوط بألوان بديلة! مثال على ذلك هو كما يلي:
<؟
Header("نوع المحتوى: صورة/png");
$im = ImageCreate (200, 100);
$col_black = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$col_red = ImageColorAllocate($im, 255,0,0)
;
ImageSetStyle($im, $style);
ImageLine($im, 0, 50, 199, 50, IMG_COLOR_STYLED);
ImagePNG($im);
ImageDestroy($im);
?>
انظر إلى التأثير.
يرجى توضيح الأسطر الثلاثة التي فصلتها بأسطر فارغة. يتم تعريف المصفوفة $style، والتي يكون أعضاؤها عبارة عن سلسلة من الألوان؛
ثم تم تنفيذ وظيفة، ثم تم استخدام "اللون" IMG_COLOR_STYLED لرسم مثل هذا "الخط المستقيم" السحري ——
الأحمر والأسود والبرتقالي تأثير بالتناوب. إذا نظرت بعناية، ستجد أن التسلسل المتناوب للأحمر والأسود والبرتقالي هو ما نحدده
تسلسل أعضاء المصفوفة $style: الأحمر، الأحمر، الأسود، البرتقالي، البرتقالي، البرتقالي، الأسود، ثم تبدأ الدورة مرة أخرى...
هل تفهم؟ لاحظ أن هذه الوظيفة مدعومة فقط بعد PHP 4.0.6.
من خلال أساسيات الرسم الخطي التي شرحتها بالتفصيل، أريد أن أكتب وظائف رسم الأشكال الهندسية الأخرى دفعة واحدة. ما أحتاج إلى تذكيره للجميع هو أنه بغض النظر عن نوع الشكل الهندسي الذي ترسمه، فهو ليس أكثر من استيعاب عدة عناصر من هذا الشكل. بغض النظر عن اللون أولاً، فإن عناصر الرسومات المختلفة هي كما يلي:
النقطة، عنصران: الإحداثي الإحداثي والمستطيل
، أربعة عناصر: الإحداثي الإحداثي والقوس
في الزاوية اليسرى العليا والزاوية اليمنى السفلية. افهم بهذه الطريقة: يمكن أن يشمل القوس قوسًا، قوس بيضاوي الشكل، ارسم قوسًا وارسم 360 درجة لتكوين دائرة؛ ارسم قوسًا بيضاويًا وارسم 360 درجة لتكوين دائرة.
وهو يشكل شكلاً بيضاويًا؛ لذلك، هناك ستة عناصر لهذا القوس: الإحداثيات الأفقية والرأسية لنقطة المركز، وطول المحور الأفقي، وطول المحور الرأسي، ونقطتي بداية القوس ونهايته.
انظر إلى المثال التالي.
<؟
Header("نوع المحتوى: صورة/png");
$im = ImageCreate (200, 100);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$col_red = ImageColorAllocate($im, 255,0,0);
$col_grn = ImageColorAllocate($im, 0,255,0);
$col_blu = ImageColorAllocate($im, 0,0,255);
ImageSetPixel($im,20,10,$col_orn);
// إنها نقطة صغيرة، أتساءل عما إذا كان من الممكن رؤيتها؟
ImageRectangle($im,25,20,95,55,$col_blu);
// المستطيل الأزرق.
ImageArc($im,20,85,50,40,225,360,$col_grn);
// قوس بيضاوي أخضر، مركزه (20،85)، المحور الأفقي 50، المحور الرأسي 40، 225 درجة إلى 360 درجة.
// يمكن ملاحظة أن نقطتي البداية والنهاية للقوس هنا يتم قياسهما بالزوايا.
// يتم حسابه في اتجاه عقارب الساعة مع الاتجاه الأفقي الأيمن بمقدار 0 درجة.
ImageArc($im,160,60,40,40,0,360,$col_orn);
// دائرة برتقالية كاملة. وطالما أن طول المحور الأفقي يساوي طول المحور الرأسي، فهي دائرة كاملة.
// تعلمنا جميعًا في المدرسة الثانوية: الدائرة هي حالة خاصة من القطع الناقص!
//أخيرًا ارسم قوسًا آخر. هل يمكن أن يكون مركز الدائرة خارج الصورة؟
ImageArc($im,160,140,240,240,0,360,$col_red);
// يستطيع!
ImagePNG($im);
ImageDestroy($im);
?>
بالطبع لا مفر من طلاء منطقة معينة بلون معين عند الرسم. لدى GD ثلاث طرق للتلوين، إحداهما تلوين المساحة المستطيلة،
أحدهما هو تلوين المنطقة المغلقة حيث تقع النقطة المحددة، والآخر هو تلوين المنطقة المحاطة باللون المحدد. انظر إلى الأمثلة التالية:
<؟
Header("نوع المحتوى: صورة/png");
$im = ImageCreate (200, 100);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$col_yel = ImageColorAllocate($im, 255,255,0);
$col_red = ImageColorAllocate($im, 255,0,0);
$col_grn = ImageColorAllocate($im, 0,255,0);
$col_blu = ImageColorAllocate($im, 0,0,255);
ImageFilledRectangle($im,20,10,100,50,$col_blu);
ImageFilledRectangle($im,5,40,50,90,$col_red);
ImageFilledRectangle($im,40,80,100,95,$col_orn);
ImageFilledRectangle($im,90,35,110,90,$col_yel);
// ما ورد أعلاه هو التلوين الأول. ارسم المستطيل مباشرة.
// لقد تعمدت إحاطة منطقة صغيرة بأربعة مستطيلات بألوان مختلفة.
// يستخدم لتوضيح اللون الثاني.
ImagePNG($im);
ImageDestroy($im);
// ألق نظرة على التأثير.
?>
ثم:
<?
Header("نوع المحتوى: صورة/png");
$im = ImageCreate (200, 100);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$col_yel = ImageColorAllocate($im, 255,255,0);
$col_red = ImageColorAllocate($im, 255,0,0);
$col_grn = ImageColorAllocate($im, 0,255,0);
$col_blu = ImageColorAllocate($im, 0,0,255);
ImageFilledRectangle($im,20,10,100,50,$col_blu);
ImageFilledRectangle($im,5,40,50,90,$col_red);
ImageFilledRectangle($im,40,80,100,95,$col_orn);
ImageFilledRectangle($im,90,35,110,90,$col_yel);
// ما ورد أعلاه هو التلوين الأول. ارسم المستطيل مباشرة.
// لقد تعمدت إحاطة منطقة صغيرة بأربعة مستطيلات بألوان مختلفة.
> // يستخدم لتوضيح اللون الثاني.
ImageFill($im,70,70,$col_grn);
// هذا هو التلوين الثاني.
ImageRectangle($im,120,40,190,90,$col_grn);
// لنرسم مستطيلاً لنصنع الإطار. في الواقع، يمكن استخدام أي شكل من أشكال الحدود كإطار.
ImageFilltoBorder($im,130,50,$col_grn,$col_orn);
// طلاء المستطيل الأخضر باللون البرتقالي.
// طالما أن النقطة المحددة تقع ضمن نطاق هذا "المربع"، فلا علاقة لها بموضع النقطة في المنطقة.
// تعمل هذه الوظيفة في الواقع على النحو التالي:
// ابدأ من النقطة المحددة وانظر إلى الخارج لمعرفة حدود اللون المحدد، إذا وجدت، توقف.
// إذا لم تتمكن من العثور عليه، قم بطلاء نقاط المرور باللون المطلوب.
ImagePNG($im);
ImageDestroy($im);
// ألق نظرة على التأثير.
// الآن الصورة التي صنعناها ملونة، ولكن في المتصفح، على الصورة،
// انقر بزر الماوس الأيمن->الخصائص: 214 بايت فقط!
?>
دعونا نتوقف هنا هذه المرة.