السلام عليكم ورحمة الله وبركاتة
طرأت على بالي فكرة وحبيت اني انفذها واياكم وبحثت عنها ووجدت درس اجنبي وقمت بترجمته ^^
اتمنى انها تفيدكم واي نقص فيها يا ريت تبلغوني
الفكرة كالتالي
نرفع صوره على الموقع ونخلي السكريبت يسوي انعكاس لها
فكرة جدأ رائعه
بسم الله
بيكون عندنا ملفين الاول اسمه مثلا image.php والثاني بيكون مثلا index.php
اول شي لازم نجيب اسم ملف الصورة وناخذ حجم الصورة
كود PHP:
$imgName = $src;
$size = getimagesize("$imgName");
تابع الكود التالي:
كود PHP:
$imgImport = imagecreatefromjpeg($imgName);
$imgName_w = $size[0];
$imgName_h = $size[1];
$gradientHeight = 100;
في السطر الاول قمنا بتحميل الصورة الي مكتبة الـ GD الموجوده في الـPHP
في الثاني قمنا بوضع قيم الطول والعرض للصورة
وفي الثالث قمنا بتعيين المتغير الذي سيحمل طول الصورة الخاصة بالانعكاس
لنقم الان بعمل الخلفية الخاصة بالصورة المنعكسة :
كود 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.'">';
?>
الحمد لله انتهيت من الموضوع
واتمنى اشوف تطبيقاتكم ^^
بالتوفيق للجميع
المصادر
الدرس
الترجمة