تحدثت آخر مرة عن استخدام GD لإنشاء أشكال هندسية مختلفة وملء الألوان. إحدى المواقف الأكثر تعقيدًا التي تم تركها لوقت لاحق عمدًا، وهي لون تعبئة المضلعات العشوائية والمضلعات العشوائية.
<؟
Header("نوع المحتوى: صورة/png");
$im = ImageCreate (200, 100);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_grn = ImageColorAllocate($im, 0,255,0);
$parray = array(40,10,60,10,70,20,60,50,40,50,30,20);
// تحديد مصفوفة يكون أعضاؤها الـ 12 هم الإحداثيات الأفقية والرأسية لـ 6 نقاط.
ImagePolygon($im,$parray,6,$col_grn);
// هذه هي وظيفة رسم المضلعات العشوائية. $parray هو المصفوفة المحددة للتو.
// 6 يعني ست نقاط. لاحظ أن النقاط الست المتصلة تشكل شكلاً سداسيًا.
// ليست هناك حاجة لإضافة نقطة في النهاية مماثلة للنقطة الأولى بشكل مصطنع لإغلاق الشكل.
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 $
parray = array(40,10,60,10,70,20,60,50,40,50,30,20);
ImageFilledPolygon($im,$parray,6,$col_grn);
ImagePNG($im);
ImageDestroy($im);
?>
حسنًا. الآن يمكننا الكتابة على الصورة. ولكن لا تتحمس كثيرًا بعد، فكتابة الحروف الصينية ستتطلب بعض المتاعب.
وسيتم شرح ذلك تدريجيا لاحقا. دعونا نلقي نظرة على كيفية كتابة الأحرف الغربية ببساطة.
<؟
Header("نوع المحتوى: صورة/png");
$im = ImageCreate (200، 250)؛
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$str="هذا اختبار.";
ImageString($im,1,10,10,$str,$col_orn);
ImageString($im,2,10,30,$str,$col_orn);
ImageString($im,3,10,60,$str,$col_orn);
ImageString($im,4,10,100,$str,$col_orn);
ImageString($im,5,10,150,$str,$col_orn);
// هنا، يتم استدعاء ImageString خمس مرات متتالية، في مواقع مختلفة.
// يتم إخراج السلسلة $str بأحجام الخطوط من الصغيرة إلى الكبيرة.
// تدعم وظيفة ImageString خمسة خطوط فقط (1~5)
ImagePNG($im);
ImageDestroy($im);
?>
انظر مرة أخرى:
<?
//Header("نوع المحتوى: صورة/png");
$im = ImageCreate (200، 250)؛
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$str="هذا اختبار.";
ImageStringUp($im,1,10,180,$str,$col_orn);
ImageStringUp($im,2,20,180,$str,$col_orn);
ImageStringUp($im,3,40,180,$str,$col_orn);
ImageStringUp($im,4,70,180,$str,$col_orn);
ImageStringUp($im,5,110,180,$str,$col_orn);
// تم تغيير اسم الوظيفة إلى ImageStringUp، ويظل الاستخدام دون تغيير.
// لإخراج النص العمودي.
ImagePNG($im);
ImageDestroy($im);
?>
أثناء استخدام وظيفة إخراج الأحرف، إذا كان بإمكانك معرفة العرض والارتفاع الذي تشغله الأحرف من أنواع الخطوط المختلفة في الصورة،
ما مدى ملاءمة ترتيب موضع أحرف الإخراج! توفر لنا PHP: ImageFontWidth() و
ImageFontHeight()، معلمتها بسيطة للغاية، وهناك واحد فقط: رقم الخط. على سبيل المثال ImageFontWidth(5)
هو الحصول على عرض كل حرف بحجم خط 5، وImageFontHeight(3) هو الحصول على ارتفاع كل حرف بحجم خط 3. إنه بسيط جدًا، لذا لن أعطي مثالاً عليه وسيتم استخدامه في الكود التالي لاحقًا.
على غرار إخراج السلاسل، يقوم ImageChar وImageCharUp بإخراج حرف واحد، ولهما استخدامات أقل وقد لا يتم استخدامهما - بغض النظر عن الأحرف أو السلاسل، فقط استخدم ImageString وImageStringUp!
بعد ذلك، سأستخدم جزءًا من الكود الذي استخدمته لرسم مخططات تحليل K-line الخاصة بالمخزون لتطبيق المحتوى المذكور أعلاه بشكل منهجي. نظرًا لأنها تتضمن قاعدة بيانات، لا يمكننا إحضار الكود الأصلي ليتمكن الجميع من استعادته للاختبار. يمكننا فقط بناء بعض البيانات لمحاكاة ظروف سوق الأوراق المالية التي تم الحصول عليها من قاعدة البيانات. نظرًا لأنه قد لا يكون هناك الكثير من الأشخاص هنا الذين يفهمون خط K للسهم، فقد لا تعرف كيفية رسم مخطط K-line. ومع ذلك، لا يمكنني التحدث عن تفاصيل K-line هنا، يمكنني فقط تقديم سلسلة من الأساليب. بعد الانتهاء من الرسم، بالتأكيد ستتمكن من معرفة أنك شاهدت صورًا كهذه من قبل.
<?php
Header("نوع المحتوى: صورة/png")
;
$bkground = ImageColorAllocate($im,255,255,255);
$data = ImageColorAllocate($im,0,0,0);
$gird = ImageColorAllocate($im,200,200,160);
$upline = ImageColorAllocate($im,255,0,0);
$dnline = ImageColorAllocate($im,0,175,175);
$d5line = ImageColorAllocate($im,255,127,0);
$d20line = ImageColorAllocate($im,0,0,127);
$d10line = ImageColorAllocate($im,255,0,255);
// حدد أولاً الألوان المستخدمة لرسم كائنات مختلفة.
ل($i=20;$i<=220;$i+=25)
ImageLine($im, 60, $i, 560, $i, $gird);
ل($j=60;$j<=560;$j+=25)
ImageLine($im, $j, 20, $j, 220, $gird);
// احسب الموضع وعرض الشبكة مسبقًا، واستخدم حلقة for لرسم الخط، مما يوفر الكثير من المتاعب.
$zzg=10.55;
$zzd=7.63;
$lzg=10350;
// بيانات سوق الأوراق المالية الافتراضية،
// $zzg هو أعلى سعر خلال الفترة المراد تحليلها، على افتراض أنه 10.55 يوان.
//$zzd هو أدنى سعر خلال الفترة المراد تحليلها، على افتراض أنه 7.63 يوان.
// $lzg هو أعلى حجم تداول خلال الفترة التي يجب تحليلها، على افتراض أنه يبلغ 10350 لوت.
// هذه بيانات مهمة لحساب "علامة التجزئة" لشبكة الإحداثيات.
$bl=$zzg-$zzd;
// الفرق بين أعلى سعر وأدنى سعر. وفقا لنسبتها إلى الارتفاع الكلي للشبكة،
// يمكنك الحصول على موضع السعر الفعلي في الشبكة.
ل($i=1;$i<=7;$i++)
{
$y=$i*25-10;
// احسب الارتفاع (الإحداثي) المناسب لمقياس التسمية بناءً على موضع خطوط الشبكة.
$str=Number_Format($zzg-($i-1)/6*$bl,2,".",,");
// احسب السعر المقابل لكل علامة اختيار وقم بتنسيق السلسلة.
$x=55-ImageFontWidth(2)*StrLen($str);
// احسب الإحداثي الإحداثي المناسب بناءً على العرض الذي ستشغله هذه السلسلة.
ImageString($im, 2,$x, $y,$str, $data);
//اكتب هذه السلسلة.
}
$str=Number_Format($lzg,0,"."،");
ImageString($im,2,564,164,$str,$data);
$str=Number_Format($lzg/2,0,"."،");
ImageString($im,2,564,189,$str,$data);
// نظرًا لوجود مقياسين فقط لكتابة حجم التداول، فإن الكتابة في حلقة ليست فعالة من حيث التكلفة.
// إذا كان الرقم كبيرًا نسبيًا، فيجب أيضًا استخدام الحلقة.
// نظرًا لأن مخطط K-line يتطلب رسم عدد لا يحصى من أشرطة K-line الصغيرة، فارسم شريط K-line صغيرًا كدالة
دالة kline($img,$kp,$zg,$zd,$sp,$cjl,$ii)
// المعلمات: $img image; $kp $zg $zd $sp هو سعر الافتتاح والأعلى والأدنى وسعر الإغلاق؛
// حجم التداول $cjl؛ عداد $ii، يشير إلى الرقم التسلسلي لشريط K-line.
{
العالمية $bl،$zzd،$lzg؛
// قم بتعريف المتغيرات الثلاثة $bl و$zzd و$lzg المستخدمة في هذه الوظيفة كمتغيرات عامة.
$h=150; // ارتفاع منطقة عمود الخط K هو 150.
$hh=200; // إجمالي ارتفاع منطقة عمود K-line ومساحة عمود الحجم هو 200.
إذا($SP<$KP)
$linecolor = ImageColorAllocate($img,0,175,175);
// إذا كان سعر الإغلاق أقل من سعر الافتتاح فهو خط سالب ملون سماوي
آخر
$linecolor = ImageColorAllocate($img,255,0,0);
// وإلا فهو خط موجب، استخدم اللون الأحمر.
$x=58+$ii*4;
// احسب الإحداثي السيني بناءً على رقم شريط K-line.
$y1=20+$h-($kp-$zzd)/$bl*$h;
// احسب الإحداثيات الرأسية المقابلة بناءً على سعر الافتتاح.
$y2=20+$h-($sp-$zzd)/$bl*$h;
// احسب الإحداثيات الرأسية المقابلة بناءً على سعر الإغلاق.
$y3=20+$h-($zg-$zzd)/$bl*$h;
// احسب الإحداثيات الرأسية المقابلة بناءً على أعلى سعر.
$y4=20+$h-($zd-$zzd)/$bl*$h;
// احسب الإحداثيات الرأسية المقابلة بناءً على أقل سعر.
$y5=20+$hh-$cjl/$lzg*($hh-$h);
// احسب الإحداثيات الرأسية المقابلة بناءً على حجم التداول.
if($y1<=$y2) ImageFilledRectangle($img,$x-1,$y1,$x+1,$y2,$linecolor);
else ImageFilledRectangle($img,$x-1,$y2,$x+1,$y1,$linecolor);
// الإحداثي السيني هو من سالب 1 إلى موجب 1، والامتداد هو 3. أي ارسم مستطيلًا صغيرًا مملوءًا بعرض 3.
// يتم تحديد الارتفاع والإحداثيات الرأسية حسب أسعار الافتتاح والإغلاق.
// بعد الاختبار، وجد أن هذه الوظيفة يجب أن تكتب إحداثيات النقطة اليسرى العليا قبل إحداثيات النقطة اليمنى السفلية.
// بدلاً من الحكم تلقائيًا على أي من النقطتين هي أعلى اليسار أو أسفل اليمين.
ImageFilledRectangle($img,$x-1,$y5,$x+1,220,$linecolor);
// ارسم أسطوانة الحجم بناءً على حجم التداول.
ImageLine($img,$x,$y3,$x,$y4,$linecolor);
// ارسم خطوط الظل العلوية والسفلية بناءً على أعلى سعر وأقل سعر.
}
// حاول رسم واحدة. الافتتاح كان 8.50، الأعلى 8.88، الأدنى 8.32، والإغلاق 8.80، مع تداول 6578 لوت.
كلاين($im,8.50,8.88,8.32,8.80,6578,1);
// ارسم واحدًا آخر. الافتتاح كان 8.80، الأعلى 9.50، الأدنى 8.80، والإغلاق 9.50، مع تداول 8,070 لوت.
// يا له من يانغشيان العظيم برأسه العاري وأقدامه العارية!
كلاين($im,8.80,9.50,8.80,9.50,8070,2);
// خط سلبي آخر. الافتتاح كان 9.80، الأعلى 9.80، الأدنى 8.90، والإغلاق 9.06، مع تداول 10,070 لوت.
// مدفوع! كم كان جميلاً أن نرميها بالأمس.
kline($im,9.80,9.80,8.90,9.06,10070,3);
// ……
ImagePNG($im);
ImageDestroy($im);
?>
بالطبع، سيكون من الصعب جدًا كتابة مثل هذه البيانات كل يوم. ما أفعله هو جلب البيانات من قاعدة البيانات.
هذا كل شيء في هذا الوقت.