السلام عليكم ورحمة الله وبركاتة
طرأت على بالي فكرة وحبيت اني انفذها واياكم وبحثت عنها ووجدت درس اجنبي وقمت بترجمته ^^
اتمنى انها تفيدكم واي نقص فيها يا ريت تبلغوني
الفكرة كالتالي
نرفع صوره على الموقع ونخلي السكريبت يسوي انعكاس لها
فكرة جدأ رائعه
بسم الله
بيكون عندنا ملفين الاول اسمه مثلا image.php والثاني بيكون مثلا index.php
اول شي لازم نجيب اسم ملف الصورة وناخذ حجم الصورة
كود PHP:$imgName = $src;
$size = getimagesize("$imgName");
تابع الكود التالي:
في السطر الاول قمنا بتحميل الصورة الي مكتبة الـ GD الموجوده في الـPHPكود PHP:$imgImport = imagecreatefromjpeg($imgName);
$imgName_w = $size[0];
$imgName_h = $size[1];
$gradientHeight = 100;
في الثاني قمنا بوضع قيم الطول والعرض للصورة
وفي الثالث قمنا بتعيين المتغير الذي سيحمل طول الصورة الخاصة بالانعكاس
لنقم الان بعمل الخلفية الخاصة بالصورة المنعكسة :
والان سنقوم بتعريف بعض المتغيرات الخاصة بلون خلفية الصورة والخط الفاصل بين الصورة الاساسيةكود PHP:$background = imagecreatetruecolor($imgName_w, $gradientHeight);
وصورة الانعكاس
الان علينا ان نقوم بوضع بداية لبدء الانعكاسكود PHP:$gradientColor = "255 255 255"; //اللون
$gradparts = explode(" ",$gradientColor);
$dividerHeight = 1;
سيقوم الكود التالي بعمل نسخة مطابقة للصورة الاصلية وقلبها راسا على عقب فنحن بحاجة الى القاعكود PHP:$gradient_y_startpoint = $dividerHeight;
$gdGradientColor=ImageColorAllocate($background,$gradparts[0],$gradparts[1],$gradparts[2]);
ومن ثم اضافتها الى الخلفية الفارغة
والكود التالي سيقوم بأنشاء الانعكاس :كود PHP:$newImage = imagecreatetruecolor($imgName_w, $imgName_h);
for ($x = 0; $x < $imgName_w; $x++) { // سيبدأ من هنا بحساب الطول
for ($y = 0; $y < $imgName_h; $y++) // ومن هنا بحساب العرض
{
imagecopy($newImage, $imgImport, $x, $imgName_h - $y - 1, $x, $y, 1, 1); //سينسخ الصورة
}
}
// اضافة الى الخلفية الفارغة
imagecopymerge ($background, $newImage, 0, 0, 0, 0, $imgName_w, $imgName_h, 100);
كود PHP://create from a the image so we can use fade out.
$gradient_line = imagecreatetruecolor($imgName_w, 1);
// Next we draw a GD line into our gradient_line
imageline ($gradient_line, 0, 0, $imgName_w, 0, $gdGradientColor);
$i = 0;
$transparency = 30; //from 0 - 100
while ($i < $gradientHeight) //create line by line changing as we go
{
imagecopymerge ($background, $gradient_line, 0,$gradient_y_startpoint, 0, 0, $imgName_w, 1, $transparency);
++$i;
++$gradient_y_startpoint;
if ($transparency == 100) {
$transparency = 100;
}
else
{
// this will determing the height of the
//reflection. The higher the number, the smaller the reflection.
//1 being the lowest(highest reflection)
$transparency = $transparency + 1;
}
}
سنقوم الان بأرسال هيدر من نوع ونحدد الخط الفاصل بين الصورتين
وهذا الكود لحفظ بعض الذاكرة ^^كود PHP:header("(anti-spam-content-type:) image/jpeg");
// عرض الخط الذي نريد رسمه
imagesetthickness ($background, $dividerHeight);
// نرسم الخط
imageline ($background, 0, 0, $imgName_w, 0, $gdGradientColor);
وبهذا نكون قد انتهينا من الملف الاولكود PHP:imagejpeg($background, '', 100);
imagedestroy($background);
imagedestroy(gradient_line);
imagedestroy(newImage);
ونأتي للملف الثاني وهو بسيط جدا
الحمد لله انتهيت من الموضوعكود PHP:<style>body { background-color: white; }</style>
<?php
// Image name, handy for doubleclick-paste.
$image = 'wii_zelda';
// Refix the .jpg extention
$image = $image.'.jpg';
// Echo it out.
echo '<img src="'.$image.'"><br /><img src="image.php?src='.$image.'">';
?>
واتمنى اشوف تطبيقاتكم ^^
بالتوفيق للجميع
المصادر
الدرس
الترجمة


رد مع اقتباس
