טוב, רובכם בוודאי מכירים את החתימה המשתנה אוטומאטית ע"פ כל מיני קריטריונים, זאת שנמצאת אצל הרבה בפורומים בחתימה.
אז החלטתי לבנות אחת כזאת בעצמי, או לפחות סוג של.אז אני עוד לא סיימתי, אבל הגעתי לשלב מאוד מעניין, ואני אשמח לשתף אתכם בשלבי העבודה שלי עד כה.
שלב ראשון, על מנת ליצור חתימה המשתנה אוטומאטית, או לפחות בלי שום עזרה, אני אשתמש במנוע הGD של PHP שיודע לצייר וליצור קבצי גראפיקה על השרת, באמצעות כמה פונקציות בסיסיות.
הפונקציה העיקרית שבניתי לצורך העניין היא זאת:
function newImage($line1,$line2,$len,$imageNumber,$adText) { $font_number=3; $width=2*$len*imagefontwidth($font_number); $height=6.6*imagefontheight($font_number); $image=imagecreate($width/1.5,$height); $back_color=imagecolorallocate($image,255,255,255); $drawing_color=imagecolorallocate($image,0,0,0); $xPos=($width-$len*imagefontheight($font_number))/2; $yPos=($height-imagefontheight($font_number))/2; $font = imageloadfont('fonts/arial.gdf'); $adFont = imageloadfont('fonts/adFont.gdf'); imagestring($image,$adFont,$len*1.9,$yPos,$adText,$drawing_color); imagestring($image,$font-1,$xPos,$yPos-25,$line2,$drawing_color); imagestring($image,$font-1,$xPos,$yPos-40,$line1,$drawing_color); imagejpeg($image,"images/image$imageNumber.jpeg"); imagedestroy($image); echo "<img src=images/image$imageNumber.jpeg>"; }
|
אוקי קצת מבלבל אך פשוט ביותר.
אני אסביר בהתחלה על הדברים היותר חשובים.
אני יוצר תמונה, ולכן השתמשתי בפונקציה:
היוצרת תמונה, עם הפרמטרים של רוחב, וגובה.
המאפשרת לי להתאים צבעים לתמונה שאבחר כפרמטר הראשון, ואז עוד שלושה פרמטרים של RGB (אדום,ירוק,כחול).
אלו הם שלבי יצירת התמונה עצמה.
לאחר מכן חשובים לי התוכן, והמיקום שלו בתוך התמונה.
לכן יצרתי את xPos ו yPos שלהם נתתי ערך של מיקום יחסי לגודל הטקסט.
שימו לב שאת גודל הטקסט אני קובע בתחילת הפונקציה, היות וכל הפונקציות, עושות שימוש בגודל הטקסט, על מנת לקבוע גודל יחסי מתאים.
לצורך קביעת פונט הטקסט בתמונה, השתמשתי ב:
המתאים פונט לתמונה, שימו לב, כי הפונט הינו בסיומת GDF, איפה מוצאים כזה פונט? יוצרים בתוכנה הזאת:
מאוד פשוט.הפונקציה הבאה היא:
הכותבת בעצם את הטקסט בתוך התמונה.
והפונקציה הסופית:
שלוקחת את כל מה שהכנו, והופכת את זה בעצם לתמונה מוגמרת.
שימו לב, ששכבתי כאן 3 שורות ולכן נאלצתי לקרוא לפונקציה 3 פעמים.
טוב זה היה השלב הראשון.
בשלב השני, אני בעצם צריך לקחת משפטים כלשהם, ולדחוף אותם לתוך התמונה.
לצורך הפרויקט, החלטתי לעשות מין "בדיחות צ'אק נוריס יומיות" או מין משהו חמוד כזה.
בניתי מסד נתונים פשוט, ככה:
$result=mysql_query("CREATE TABLE $newTable ( sentence_id int unsigned auto_increment primary key, line1_text text, line2_text text, sentence_cat INT )") or die(mysql_error());
|
שמאפשר לי לכתוב שתי שורות, למה? כי המשפטים ברובם די ארוכים, וצורכים שורה שניה.
עכשיו צריך להכניס קצת תוכן, אז כתבתי סקריפט די ערבי, שעובד, שפשוט ידנית מכניס את כל המשפטים:
<?phpinclude('database/connect_db.php'); $text="Chuck Norris uses pepper spray to spice up his steaks."; $text="Chuck Norris doesnt go hunting....; CHUCK NORRIS GOES KILLING."; $text="If you have five dollars and Chuck Norris has five dollars,; Chuck Norris has more money than you."; $text="There is no Ctrl button on Chuck Norriss computer.; Chuck Norris is always in control."; $text="Apple pays Chuck Norris 99 cents every time he listens to a song."; $text="Chuck Norris can sneeze with his eyes open."; $text="Chuck Norris can eat just one Lays potato chip."; $text="Chuck Norris is suing Myspace for taking the name ;of what he calls everything around you."; $text="Chuck Norris destroyed the periodic table, because ;he only recognizes the element of surprise."; $text="Chuck Norris can kill two stones with one bird."; $text="Guns dont kill people. Chuck Norris kills People."; $text="There is no theory of evolution. Just a list of ;animals Chuck Norris allows to live."; $text="Chuck Norris does not sleep. He waits."; $text="The chief export of Chuck Norris is Pain."; $text="There is no chin under Chuck Norris Beard. ;There is only another fist."; $text="Chuck Norris has two speeds. Walk, and Kill."; $text="The leading causes of death in the United ;States are: 1. Heart Disease 2. Chuck Norris 3. Cancer."; $tableName=$db_perfix.'_'.'sentences_list'; foreach($text as $value) { $pos=strrpos($value,";"); $line1=substr_replace($value," ",$pos); $line2=substr_replace($value," ",0,$pos); $line2=str_replace(";"," ",$line2); echo $line1,"<br>",$line2; echo "<br><br>"; $result=mysql_query("INSERT INTO $tableName (line1_text,line2_text, sentence_cat) VALUE ('$line1','$line2',1)") or die(mysql_error()); } ?>
|
שימו לב, לאחר שיצרתי מערך עם כל המשפטים, אני רוצה להכניס אותם לDB, אז בתוך כל משפט, שמתי ";" במקום שבו אני מעוניין שתתחיל שורה חדשה, ובאמצעות פונקציות בסיסיות למדי, חילקתי לתוך הDB לפי שורות.
שימו לב, ששמתי את השורה הראשונה כשנייה ולהפך, כי משומה הוא נהפך לי בסוף בתצוגה.
בנוסף השורה השנייה כברירת מחדל קיבל ערך ריק (לא NULL) אחרת הפונקציה ליצירת הטקסט בהתחלה תעשה בעיות.
טוב, אז יש לי DB עם 17 משפטים ופונקציה ליצירת חתימה, איך משלבים?
פשוט:
include('database/connect_db.php');$tableName=$db_perfix.'_'.'sentences_list'; $num=rand(1,17); $result=mysql_query("SELECT * FROM $tableName where sentence_id=$num") or die(mysql_error()); $row=mysql_fetch_array($result); $imageNumber=1; $line1=$row; $line2=$row; $adText="Daily Chuck Norris Sentence"; if (strlen($line1)>strlen($line2)) { $len=strlen($line1); } else { $len=strlen($line2); }
|
אוקי, בעיקרון, א הקטע הנ"ל שמתי לפני הפונקציה הראשונה, כדי להניח את אבני היסוד לפונקציה, ואחרי הפונקציה קראתי לה בצורה פשוט:
newImage($line1,$line2,$len,$imageNumber,$adText);
|
והכנסתי את כל הנתונים מהקטע קוד האחרון.
הדבר האחרון שנשאר, הוא ליצור תקייה בשם images אותה נשאיר ריקה.
ותקייה בשם fonts בה נשים את הפונטים שיצרנו.
אגב, אם אתם מעוניינים להשתמש בפונטים מהפונקציה, הנה הם:
זהו, בעיקרון אם תעבדו לפי כל מה שכתבתי, יצא לכם דבר מגניב למדי אך בסיסי ביותר.
לצערי אין לי דוגמא להראות לכם, כי השרת שלי משומה עושה בעיות, אבל תסתפקו במילה שלי שזה עובד
.
דבר אחרון, דיברתי על אוטומציה, אז בעיקרון את האוטומציה אני מבצע בצורה הבאה, אני בונה בשרת Cron Jobs כלומר רשימת משימות לשרת, אותן הוא יבצע ע"פ תזמון שאני קובע, כלומר למשל פעם ב24 שעות תריץ את הקובץ הזה וכדו' וככה אני מריץ רק את קובץ ההחלפה, שיגריל משפט, ייצור תמונה, ויחליף את הישנה בחדשה.
אגב, באמצעות Cron Jobs אפשר לעשות המון דברים, אבל זה לא המקום, גוגל יעזור במקרה הזה יותר ממני. 
אגב, יצאתי כאן מנקודת הנחה שלקורא יש ידע בסיסי+ בPHP והנחתי שאתם יודעים להתחבר למסד הנתונים ולחבר בין כל הקבצים, אבל בכ"ז אם יש לכם שאלות אני אשמח לענות.