لا أجرؤ حقًا على القول إنني "أتحدث" عن مكتبة GD هنا، لأنني استخدمت GD مرة أو مرتين فقط، ولم أتواصل بعد مع معظم الوظائف. لكن سانبوزو شياو دياو طلب مني بحماس أن أكتب مخطوطة، لذلك لم يكن لدي خيار سوى أن أجرب وأكتب بعضًا من تجاربي الخاصة. آمل أن يكون بمثابة نقطة انطلاق.
في الواقع، لا يتعين علينا بالضرورة استخدام GD لتحقيق تأثير "الرسم البياني" في صفحة الويب. الحل الأسهل هو الرسم البياني - والذي يمكن حله باستخدام HTML. على سبيل المثال:
<? $b = array(150,110,125,180,160,175,230,220);
<أتش تي أم أل>
<الرأس>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<العنوان></العنوان>
<نمط>
<!--
td{ حجم الخط: 9pt }
-->
</نمط>
</الرأس>
<الجسم>
<حدود الجدول=0>
<tr valign="bottom"> /* (1) */
<?for($i=0;$i<8;$i++) { ?><td align="center">
<table height="<?echo $b[$i];?>" border=0> /* (2) */
<تر>
<td bgcolor="#3F7F9F" width="40"></td> /* (3) */
</tr>
</table><br><font color="#3F7F9F"><?echo $b[$i];?></font> /* (4) */
</td><? } ?>
</tr>
</الجدول>
</الجسم>
</html>
<? $b = array(150,110,125,180,160,175,230,220); ?> إنها مجموعة من البيانات لا علاقة لها بالوضع العام، لقد أضفت بعض الجمل فيها الملاحظات، دعونا نشرحها واحدة تلو الأخرى.
(1) ما يجب ملاحظته هنا هو valign='bottom'، وهو محاذاة الجزء السفلي من محتوى الخلية. لماذا إضافته في <tr>
قماش صوف؟ يمكنك جعل محتويات هذا الصف في الجدول تتبع هذه المحاذاة دون الحاجة إلى تحديدها في كل <td>
بهذه الطريقة، يمكن للكود الأصلي لصفحة HTML الناتج عن تنفيذ PHP توفير عشرات البايتات! توفير وقت المشاهد الثمين.
(2) انتبه، الشيء الأكثر أهمية هنا! <ارتفاع الجدول = "xxx">، نستخدم سمة الارتفاع للجدول
لتحقيق "أعمدة" ذات ارتفاعات مختلفة. من أجل السماح للجميع برؤية واضحة، لم يتم قياس البيانات الأصلية بشكل متناسب.
إذا كانت بياناتك كبيرة أو صغيرة بشكل خاص، فليس من المناسب تعيينها مباشرةً إلى سمة الارتفاع الخاصة بالجدول، وبدلاً من ذلك، يجب تعيينها بناءً على الموقف.
ينبغي تحجيم البيانات بشكل مناسب. على سبيل المثال، تقدر أن كل رقم في مجموعة البيانات الخاصة بك سيكون بين 3000 و8000.
يمكنك التفكير في تقليصها 25 مرة، أي height="<? echo Floor(b[$i]/25); ?>"
(3) أذكر في هذا السطر bgcolor="#xxxxxx" وهو لون الاسطوانة (RGB). في الواقع، ينبغي أن يكون الرسم البياني الحقيقي
تستخدم كل أسطوانة لونًا لإبقاء الكود بسيطًا قدر الإمكان، استخدمت حلقة for هذه، لذلك لا توجد طريقة لتقديمها
يتم تعيين لون لكل اسطوانة. —— في الواقع، هناك طريقة لا أحتاج حقًا إلى كتابتها في هذا المثال.
وظيفة تستخرج الألوان لإرباك المبتدئين. لذا، الأمر متروك لك لإتقان هذا الجزء.
(4) هنا يتم عرض البيانات الحقيقية بنفس لون الأشرطة. وبالطبع، يمكنك أيضًا اختيار وضع هذا الرقم في أعلى الأسطوانة
، وربما أكثر احترافية. ومع ذلك، ما زلت معتادًا على وضعها أدناه.
بمساعدة جداول HTML، يمكننا إنشاء رسوم بيانية متنوعة. يستخدم هذا المثال bgcolor لعرض كتل الألوان.
بالإضافة إلى ذلك، يمكنك أيضًا استخدام الخلفية = "(صورة)". الصورة منقوشة، بحيث يحتوي عمود الرسم البياني على أنماط.
وإذا قمت بعرض البيانات الحقيقية بلون متباين جدًا في <td> الموضح في الملاحظة (3) أعلاه، فسيكون لها أيضًا تأثير جيد جدًا.
ما سبق هو وسيلة فعالة لتجنب GD، ولكن إذا كنت تريد إنشاء رسومات معقدة، فيجب عليك استخدام GD.
للأسف، في دليل PHP4 الصيني، يقال أن هناك 44 وظيفة في مكتبة وظائف GD، لكنني نظرت إلى أحدث إصدار من دليل PHP4 باللغة الإنجليزية،
يوجد بالفعل أكثر من 80 وظيفة GD! نظرًا لأن اللغة الإنجليزية للمؤلف ضعيفة، فلا يمكنني التخمين إلا عند قراءة دليل اللغة الإنجليزية، لذلك لست متأكدًا مما إذا كانت مكتبة GD الجديدة تدعم GIF مرة أخرى؟ على أي حال، أعتقد أننا نستخدم لغة PHP وهي مجانية تمامًا، فلماذا "نخاطر" باستخدام صورة GIF محمية بحقوق الطبع والنشر؟ لماذا لا تذهب مجانًا وتستخدم PNG؟ طالما أنك لا تحتاج إلى رسوم متحركة، يمكن لـ PNG أيضًا إنشاء ملفات صغيرة بحجم GIF!
بعد ذلك، سوف أقوم بدمج برنامج ووصف وظائف GD الشائعة الاستخدام جملة واحدة في كل مرة.
لنبدأ من البداية.
<؟
Header("نوع المحتوى: صورة/png");
// يؤدي هذا إلى إرسال رأس HTTP لإخبار المتصفح: "اسمع، هذه صورة، لا تعرضها كنص!"
// نظرًا لتفضيلاتي الشخصية، استخدمت PNG بالطبع، يمكنك أيضًا استخدام Header("Content-type: image/gif");
// Or Header("نوع المحتوى: صورة/jpeg");
$im = ImageCreate (50, 100);
// إنشاء صورة. لاحظ أنه لم يتم تعيين تنسيق الصورة عند إنشائها.
// وظيفة ImageCreate، معلمتان، بلا شك، هما عرض الصورة التي تم إنشاؤها وارتفاعها.
// قيمتها المرتجعة هي قيمة int. هذه القيمة مهمة جدًا.
// حتى يتم إخراج هذه الصورة، يتم استخدام هذه القيمة في كل مكان.
// نظرًا لأن تكرار الاستخدام مرتفع جدًا، فإننا نخصصه لمتغير باسم أقصر.
// الآن لنرسم خطًا. وظيفة رسم الخط هي كما يلي:
// imageline (int im، int x1، int y1، int x2، int y2، int col)؛
// المعلمة الأولى im هي معرف الصورة، متبوعة بـ x1، y1، x2، y2، وغني عن القول،
// هي إحداثيات نقطة البداية (x1, y1) ونقطة النهاية (x2, y2)! (إحداثيات الزاوية اليسرى العليا من الصورة هي (0,0))
// ما هي المعلمة الأخيرة؟ إنه اللون! يتطلب GD تحديد ألوان للصور واستخدام هذه الألوان المحددة للرسم.
// لماذا نحتاج إلى تحديد الألوان للصور؟ أعتقد أنه يتم استخدامه كـ "لوحة ألوان" لصور GIF وPNG وغيرها من الصور.
// يتضمن ذلك معرفة الصورة نفسها، لذا لن أخوض في التفاصيل هنا.
// لذا، قبل رسم الخط، علينا تحديد اللون أولاً (وهو أمر مزعج حقًا).
// $col_red = ImageColorAllocate($im, 255,192,192);
// تحتوي هذه الدالة على أربع معاملات، أولها $im... هل ما زلت بحاجة إلى قولها في كل مرة؟ لن أقول ذلك في المرة القادمة!
// المعلمات الثلاثة التالية هي مكونات اللون الأحمر (R)، والأخضر (G)، والأزرق (B) للون المراد تعريفه، والتي تتراوح من 0 إلى 255.
// يتضمن هذا مرة أخرى معرفة بالفيزياء والبصريات. مكونات الضوء المختلفة من الألوان الأساسية الثلاثة الأحمر والأخضر والأزرق،
// ينتج ألوانًا متغيرة باستمرار. اللون الذي حددته أعلاه هو 255 أحمر و192 أخضر و192 أزرق.
// إذا لم أكن مخطئا، فهذا هو اللون الأحمر الأكثر إشراقا. دعونا نحاول رسم خط في لحظة.
// لماذا الانتظار بعض الوقت؟ لأنه إذا كانت الصورة لها لون واحد فقط، فلا يمكن رؤية أي شيء!
// لنجعل الخلفية سوداء أولاً!
// على الرغم من عدم ذكر ذلك صراحةً في الدليل، فقد وجدت أن اللون المحدد أولاً سيتم استخدامه كخلفية افتراضيًا.
$col_black = ImageColorAllocate($im, 0,0,0);
// يحدد اللون، لا يوجد ضوء أحمر، أو ضوء أخضر، أو ضوء أزرق. إنه أسود بشكل طبيعي.
// ثم حدد اللون المستخدم لرسم الخط:
$col_red = ImageColorAllocate($im, 255,192,192);
// الآن يمكنك البدء في رسم الخطوط الحمراء:
خط الصورة ($im، 10، 20، 45، 85، $col_red)؛
// لا تقلق، لن تتمكن من رؤية الصورة بعد الانتهاء من هذه الجملة.
ImagePNG($im);
// تقوم هذه الجملة بإخراج صورة. يقوم ImagePNG() بإخراج صورة png، ويخرج ImageJPEG صورة jpeg.
// إخراج صورة GIF من ImageGIF...
// لا تنس أن هناك معلمة هنا، إذا تم عرضها على الشاشة بدلاً من حفظها في ملف،
// حذف هذه المعلمة - اسم الملف المحفوظ. إذا كنت تريد حفظه كملف،
// ينبغي كتابته بهذا الشكل: ImagePNG($im,"test.png");
// إذا لم يتم تحديد مسار، فسيتم حفظ هذا الملف في الدليل الحالي لموقع الويب الخاص بك.
// إذا كان بتنسيق JPEG، فهناك معلمة أخرى وهي جودة JPEG (0~100).
// إذا كنت تريد عرضه على الشاشة، ImageJPEG($im,"",80);
// إذا كنت تريد الحفظ، ImageJPEG($im,"test.jpg",80);
// لاحظ أنه إذا كنت تريد حفظ هذه الصورة كملف،
// لا يمكنك استخدام Header("Content-type: image/png");
// لأنه بمجرد حدوث ذلك، فهذا يعني أنك ستخرج صورة.
ImageDestroy($im);
// قم بتدمير الصورة الموجودة في الذاكرة لتحرير مساحة في الذاكرة.
// هذا كل شيء: تم الانتهاء من أبسط رسم GD.
// من خلال الاختبار، وجد أن ملف الصورة الذي تم إنشاؤه بتنسيق PNG يحتوي على 131 بايت فقط.
// يتطلب استخدام تنسيق JPEG، حتى باستخدام أسوأ جودة (0)، 855 بايت، وجودة الصورة سيئة جدًا بحيث لا يمكن عرضها.
// تتطلب أعلى جودة بتنسيق JPEG 2360 بايت، لكن الألوان لا تزال غير زاهية كما هو الحال عند استخدام PNG.
// يمكن ملاحظة أنه بالنسبة لهذا النوع من الصور ذات عدد صغير من الألوان، فإن استخدام PNG يكون أكثر فعالية من حيث التكلفة من JPEG.
?>
هذه المرة سأتوقف هنا وسأحاول مواصلة الكتابة في أقرب وقت ممكن.