انشاء كود التحقق او captcha:اعلان:
[ltr]$image = imagecreatetruecolor(150, 60);[/ltr]
طبعا المدخل (انا ما لقيت كلمة مناسبة اكتر من هي ) الاول عرض الصورة و الثاني الارتفاع
الصورة رح تكون بدون لون (لون اسود) ولكي نلونها بلون معين نضع
الصورة رح تكون بدون لون (لون اسود) ولكي نلونها بلون معين نضع
[ltr]$bgcolor = imagecolorallocate($image, 223, 225, 230);
imagefill($image, 0, 0, $bgcolor);[/ltr]
السطر الاول ل"تركيب اللون" المدخل الاول هو "مقبض" الصورة و الثاني قيمة اللون الاحمر و الثالث قيمة اللون الاخضر و الرابع الازرق طبعا القيمة تتراوح بين 0 -255
و السطر الثاني المدخل الاول هو "مقبض" للصورة و الثاني سينات المكان المراد استخدام اللون فيه و الثالث العينات و الرابع اللون نفسو
حاليا فد قمنا بتهيئة الصورة اوليا الان سنقوم بانشاء الكود الذي سيكتب على الصورة و يجب على هذا الكود ان يكون عشوائيا فلذلك سنقوم باستخدام السطور التالية :
و السطر الثاني المدخل الاول هو "مقبض" للصورة و الثاني سينات المكان المراد استخدام اللون فيه و الثالث العينات و الرابع اللون نفسو
حاليا فد قمنا بتهيئة الصورة اوليا الان سنقوم بانشاء الكود الذي سيكتب على الصورة و يجب على هذا الكود ان يكون عشوائيا فلذلك سنقوم باستخدام السطور التالية :
[ltr]$chars = 'abcdefghjkmnpqrstwxyz2345689';
for($x=0; $x<6; $x++)
{
$key .= $chars[mt_rand(0, 28)];
}[/ltr]
طبعا المتغير chars يحوي على بعض الاحرف و الارقام (لا يفضل استخدام الصفر و ال o و غيرها من الاحرف المتشابها )
طبعا حلقة for تكرر لست مرات و في كل مرة يضاف حرف الى المتغير key الاختيار العشوائي للحروف يتم باستخدام الدالة mt_rand المدخل الاول هو العدد الاصغر والثاني العدد الاكبر و هي تقوم باخذ قيمة عشوائية بينهما
الان لدينا المتغير $key فيه الكود المكون من 6 محارف
الخطوة التالية هي كتابة النص على الصورة
الان لدينا المتغير $key فيه الكود المكون من 6 محارف
الخطوة التالية هي كتابة النص على الصورة
[ltr]$start_x_pos = 15;
$start_y_pos = 40;
for($y=0; $y<6;$y++)
{
$x_pos = $start_x_pos + $y*20;
$y_pos = $start_y_pos + (mt_rand(-10,+10));
$color = imagecolorallocate($image, mt_rand(0,128), mt_rand(0,128), mt_rand(0,128));
imagettftext($image,mt_rand(15,20),mt_rand(-10, 10), $x_pos,$y_pos,$color,'arial.ttf',$key[$y]);
}[/ltr]
$start_x_pos و $start_y_pos هي احداثيات اول حرف من الحروف طبعا حلقة
for من اجل كتابة كل حرف بلون مختلف و زاوية مختلفة و احداثيات مختلفة حتى تزداد صعوبة ادراكه من قبل بوت
$x_pos السينات النهائية للحرف طبعا يتم حسابها باضافة مسافة تتناسب طردا مع ترتيب الحرف
$y_pos العينات النهائية طبعا تضاف اليها او تطرح منها قيمة عشوائية كي لا يكون للحروف جميعها نفس العينات
ال $color لا داعي لشرحها
for من اجل كتابة كل حرف بلون مختلف و زاوية مختلفة و احداثيات مختلفة حتى تزداد صعوبة ادراكه من قبل بوت
$x_pos السينات النهائية للحرف طبعا يتم حسابها باضافة مسافة تتناسب طردا مع ترتيب الحرف
$y_pos العينات النهائية طبعا تضاف اليها او تطرح منها قيمة عشوائية كي لا يكون للحروف جميعها نفس العينات
ال $color لا داعي لشرحها
[ltr]imagettftext($image,mt_rand(15,20),mt_rand(-10, 10), $x_pos,$y_pos,$color,'arial.ttf',$key[$y]);[/ltr]
هذا اهم سطر يتستخدم لكتابة الحرف على الصورة المدخلات :
الاول *** للصورة الثاني قياس الخط الثالث زاوية الكتابة الرابع السينات الخامس العينات السادس اللون
السابع مسار الخط يجب ان يكون لديك الخط في نفس المجلد و بنفس الاسم الذي قد قمت بتحديده او استخدم مسار اخر لملف الخط لديك
الثامن الحرف المراد طباعته
الان لكي نقوم بزيادة صعوبة قرائة الكود بالنسبة للبوت نقوم باضافة تاثير للتموج wave
الاول *** للصورة الثاني قياس الخط الثالث زاوية الكتابة الرابع السينات الخامس العينات السادس اللون
السابع مسار الخط يجب ان يكون لديك الخط في نفس المجلد و بنفس الاسم الذي قد قمت بتحديده او استخدم مسار اخر لملف الخط لديك
الثامن الحرف المراد طباعته
الان لكي نقوم بزيادة صعوبة قرائة الكود بالنسبة للبوت نقوم باضافة تاثير للتموج wave
[ltr]$new_image = imagecreatetruecolor(150, 60);
$bgcolor = imagecolorallocate($new_image, 223, 225, 230);
imagefill($new_image, 0, 0, $bgcolor);
$wave_rand = mt_rand(6, 10);
for($i=0;$i<149;$i++)
{
for($j=0;$j<59;$j++)
{
$color_here = imagecolorat($image, $i, $j);
if($color_here == $bgcolor)
{
$color_here = imagecolorallocate($image, 223, 225, 230);
}
$nx = $i - ($wave_rand * sin ((14-$wave_rand)*3.1495*$j/180));
imagesetpixel($new_image, $nx, $j, $color_here);
}
}[/ltr]
قمنا بانشاء صورة جديدة حتى لا تختلط الصورتين مع بعضهم و وضعنا لون الخلفية نفس لون خلفية الصورة الاصلية ثم باستخدام حلقات ال for تم الوصول الة جميع بكسلات الصورة و من ثم تعديلها اذا لم تفهم السطر "المعقد" فانت لم تكن تحب المثلثات في الثانوي :happy: على كل حال يتم فيها كل بكسل حسب المعدلة المثلثية اللتي اغلبها فقط للتحويل من درجة الى راديانانا هنا لم استخدم دالة deg2rad فقط للتنويه
هنا اصبحت الصورة جاهزي الان لكي تظهر الصورة سنضع السطرين التاليين :
هنا اصبحت الصورة جاهزي الان لكي تظهر الصورة سنضع السطرين التاليين :
[ltr]header('Content-type: image/jpeg');
imagejpeg($new_image)[/ltr]
طبعا بامكانك استخدام صيغة png اذا اردت
الان سنستخدم الجلسات لكي نحتفظ بقيمة الكود "المشفر بشفرة md5 طبعا"
لا ننسى السطر في اول الملف
الان سنستخدم الجلسات لكي نحتفظ بقيمة الكود "المشفر بشفرة md5 طبعا"
لا ننسى السطر في اول الملف
[ltr]session_start();[/ltr]
الان نقوم بتخزين الكود المشفر بمتحول
\
[ltr]$_SESSION['key'] = md5($key);[/ltr]
وفي حال اردنا التحقق من الكود نقوم بتشفير الكود الذي ادخله المستخدم و من ثم نتحقق من المساواة
لكي تظهر الصورة نستخدم
لكي تظهر الصورة نستخدم
[ltr][/ltr]
انا قمت ببرمجة class كامل مع مميزات كثير جدا لكن المشكلة ان البور سبلاي لجهازي قد احترقت قبل العيد بيومين و السكربت عليه و انا في سوريا و الاشتباكات كانت في اوجها في وقفة العيد فلم اتمكن من شراء واحدة :sad: إن شاء الله عندما اشغل جهازي ساعرضها عليكم لابداء ارائكم فيها
صورة للدرس
صورة للدرس
[url=http://arabteam2000-forum.com/uploads/monthly_10_2012/post-268329-005537200 1351467786.jpg][/url]
والسلام عليكم ورحمة الله وبركاته
اتمني ان يعجبكم الدرس
وا هام جدا موقع المهند نت تابع للمدونةالمصدر : المهند نت: http://almohaned14.clubme.net/t31-topic#ixzz3dtjjrzww
ليست هناك تعليقات:
إرسال تعليق