Hide this notice

مرحبا أنت تستخدم انترنت اكسبلورر ٦ و هو متصفح اصدر في العام 2001 الا يبدو لك ذلك قديما .

نحن ننصحك بقوة بترقية متصفحك إلى نسخة أحدث مثل أنترنت اكسيلورر ٨ أو فايرفوكس و الذي سيتيح لك تصفح أفضل ليس لموقعنا فقط بل في كل أرجاء الأنترنت..

لو كنت لا تريد أو لا تملك الصلاحية لترقية المتصفح يمكنك أن تستمر في التصفح على الرحب و السعة لكن تذكر قد لا تتمكن من استعراض بعض خدمات الموقع بالشكل المطلوب . بالطبع يمكنك إخفاء هذه الرسالة و تستمر في التصفح و لن تظهر لك هذه الرسالة مرة أخرى .

Post Pic

php: إنشاء الصور المصغرة على الخط

تحويل الصور إلى صورة مصغرة بواسطة ال php و مكتبة GD على الخط و بدون برامج إضافية .

للتأكد من أن موقعك أو مستضيفك يدعم مكتبة Gd قم بإنشاء ملف وسمه أي اسم و ضع فيه الدالة phpinfo() و انقلة لمستضيفك و اعرضه .. و ابحث عن مكتبة gd إذا وجدتها فهي مدعومة .. و الا يمكنك طلبتها من مستضيفك .

لنبدأ على بركة الله

سنفترض أن الصورة التي سنصغرها موجودة في مجلد ما و اسمه images

الفكرة تعتمد على الخطوات التالية :

  1. فتح الصورة التي نريد تصغيرها
  2. نسخ الجزء الذي نريده من هذه الصورة
  3. حفظ الصورة في ملف جديد أو استبدال الملف الجديد بالقديم

ما هي الدوال التي سنستخدمها ؟

  1. سنستخدم أحد الدوال التالي imageCreateFromJPEG ,imageCreateFromPNG , imageCreateFromGIF ,imageCreateFromWBMP لفتح الصور حاليا لا يوجد دالة أصلية في الphp لدعم bmp لكن يمكننا الاستعانة بدوال خارجية لفعل ذلك و سنرى ذلك لاحقا ..
  2. imageSX لمعرفة عرض الصورة الأصلية
  3. ImageSY لمعرفة طول الصورة الأصلية
  4. ImageCreateTrueColor لإنشاء صورة جديدة فارغة
  5. imageCopyResampled لتصغير الصورة و نسخها ..

لتسهيل عملنا سننشأ دالة نحدد لها الصورة الأصلية و اسم الصورة الجديدة و عرضها و ارتفاعها ..

لنستعرض الدالة التالية ثم سنفصلها ..

<?
function createthumb($name,$filename,$new_w,$new_h){

 // نستخلص امتداد الصورة
$system=explode('.',$name);
 // لكل امتداد هناك دالة خاصة و هنا نحدد ما نريد
 switch ($system[1])
 {
 case 'jpg':
 case 'jpeg':
 $src_img=imagecreatefromjpeg($name);
 break;
 case 'png':
 $src_img=imagecreatefrompng($name);
 break;
 case 'gif':
 $src_img=imagecreatefromgif($name);
 break;
 case 'bmp':
 $src_img=imagecreatefrombmp($name);
 break;
 }

 // نحصل على طول الصورة الأصلية
$old_x=imageSX($src_img);
 // نحصل على ارتفاع الدالة الأصلية
$old_y=imageSY($src_img);
 // ننشأ الصورة الجديدة المصغيرة
$dst_img=ImageCreateTrueColor($new_w,$new_h);
 //ننسخ محتويات الصورة الكبيرة في الصورة الجديدة التي انشأناها في الخطوة السابقة
imagecopyresampled($dst_img,$src_img,0,0,0,0,$new_w,$new_h,$old_x,$old_y);
// نحدد الصيغة التي نريد للصورة الجديدة ان تخزن بها ..
 switch ($system[1]){
 case 'jpg':
 case 'jpeg':
 imagejpeg($dst_img,$filename);
 break;
 case 'png':
 imagepng($dst_img,$filename);
 break;
 case 'gif':
 imagegif($dst_img,$filename);
 break;
 case 'bmp':
 imagebmp($dst_img,$filename);
 break;
 }

 // التخلص من الصور المؤقتة التي انشأناها
imagedestroy($dst_img);
imagedestroy($src_img);
}
?>

في الجملة الأولى أنشأنا دالة و اسميناها  createthumb هذه الدالة تطلب المتغيرات التالية

  • $name =  اسم الملف الجديد
  • $filename = اسم الملف الأصلي
  • $new_w عرض الصورة المصغرة الجديدة
  • $new_h ارتفاع الصورة المصغرة الجديدة .
<? function createthumb($name,$filename,$new_w,$new_h){&nbsp;  ?>

و هذه الدوال جميعها تأخذ متغير الصورة  و هنا نكون انشأنا دليل و ليس صورة في المتغير src_image

   <?
// لكل امتداد هناك دالة خاصة و هنا نحدد ما نريد
switch ($system[1])
{
 case 'jpg':
 case 'jpeg':
 $src_img=imagecreatefromjpeg($name);
 break;
 case 'png':
 $src_img=imagecreatefrompng($name);
 break;
 case 'gif':
 $src_img=imagecreatefromgif($name);
 break;
 case 'bmp':
 $src_img=imagecreatefrombmp($name);
 break;
 }
?>

نستخلص هنا طول و ارتفاع الصورة الأصلية

<?
// نحصل على طول الصورة الأصلية
$old_x=imageSX($src_img);
// نحصل على ارتفاع الدالة الأصلية
$old_y=imageSY($src_img);
?>

و الآن ننشأ صورة جديدة بالطول و العرض الجديدين للصورة المصغرة

<?
// ننشأ الصورة الجديدة المصغيرة
$dst_img=ImageCreateTrueColor($new_w,$new_h);

?>

و الآن ننسخ محتويات الصورة الأصلية إلى الصورة الجديدة الصورة الجديدة  هي dst_img  الصورة الأصلية src_img  القيم الأربعة التالية حددناها نحن بأصفار و هي على الترتيت

  1. النقطة على المستوى السيني x التي يتم النسخ الصورة في الصورة الجديدة ..  القيمة صفر تبدأ من أول الزاوية اليسرى .
  2. النقطة على المستوى الصادي y في الصورة الجديدة . و القيمة صفر تبدأ من أعلى زاوية .
  3. النقطة على المستوى السيني التي سيتم النسخ منها فبدلا من تصغير الصورة كلها يمكن تصغير جزء منها .
  4. النقطة على المستوى الصادي في الصورة الأصلية

ثم نضع قيم الطول و العرض للصورة الجديدة و الطول و العرض للصورة القديمة

<?
//ننسخ محتويات الصورة الكبيرة في الصورة الجديدة التي انشأناها في الخطوة  السابقة
imagecopyresampled($dst_img,$src_img,0,0,0,0,$new_w,$new_h,$old_x,$old_y);
?>

و الآن نريد تحديد كيف سنخزن الصورة الجديدة أو ما هي صيغتها من الممكن ان نختار صيغة واحدة لكل الملفات المصغرة بغض النظر عن نوع الصورة الأصلية او نستطيع ان نحول الصورة الجديدة إلى نفس الصيغة الأصلية ..

// لكل امتداد هناك دالة خاصة و هنا نحدد ما نريد
switch ($system[1])
 {
 case 'jpg':
 case 'jpeg':
 $src_img=imagecreatefromjpeg($name);
 break;
 case 'png':
 $src_img=imagecreatefrompng($name);
 break;
 case 'gif':
 $src_img=imagecreatefromgif($name);
 break;
 case 'bmp':
 $src_img=imagecreatefrombmp($name);
 break;
 }

الدالة imagegif تستخدم لحفظ الصورة بصيغة gif و هكذا .

و في أخر سطرين سندمر أو نخذف الصور المؤقتة التي  لا نحتاجها .

و الآن لإستدعاء الدالة  نستخدم

<?
// تجربة للمثال ..
createthumb('test1/image.gif','test2/image2.gif',80,80);
?>
 

سنحول الصورة image.gif الموجودة في المجلد test1 إلى الصورة image2.gif في المجلد test2

مصادر أخرى :

HTML And PHP Scripts – Php Src Image
Free HTML and PHP Programming Guides, Lessons and Tutorials

بقلم : فاطمة العمادي

أم و زوجة .. مصممة حرة و مصورة .. عرف الناس كتاباتي التقنية من خلال شخصية خيالية هي الدكتور نت . اصمم المواقع منذ العام ١٩٩٩م .

أوسمة :