العمل مع الصور في PHP: تغيير الحجم والقص (resize, crop)

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع الصور في PHP: تغيير الأحجام والقص (resize, crop)



معالجة الصور هي واحدة من أكثر المهام شيوعًا عند تطوير تطبيقات الويب. تحميل الصور الرمزية، إنشاء الصور المصغرة، تكييف الصور مع دقات الشاشات المختلفة - كل هذا يتطلب تغيير الأحجام (resize) والقص (crop). في PHP، هناك أداتان رئيسيتان لهذا الغرض: الامتداد المدمج GD والمكتبة الأكثر قوة Imagick. في هذه المقالة، سنشرح كلا النهجين مع أمثلة عملية.



1. امتداد GD (الأداة القياسية)



GD هو الامتداد الأكثر شيوعًا وسهولة في الوصول للعمل مع الصور. إنه مدمج في معظم إصدارات PHP ولا يتطلب تثبيتًا إضافيًا. يدعم GD التنسيقات الأساسية: JPEG و PNG و GIF و WebP.



1.1. تغيير الحجم (resize) مع الحفاظ على النسب



المهمة الكلاسيكية هي تصغير صورة كبيرة إلى عرض معين مع الحفاظ على نسبة العرض إلى الارتفاع. فيما يلي مثال لدالة تقوم بقياس الصورة إلى العرض المحدد.



<?phpfunction resizeImage($srcFile, $destFile, $newWidth) {    // الحصول على معلومات الصورة الأصلية    list($width, $height, $type) = getimagesize($srcFile);

// حساب الارتفاع الجديد بشكل متناسب $ratio = $width / $height; $newHeight = $newWidth / $ratio;

// إنشاء لوحة للصورة الجديدة $srcImage = imagecreatefromjpeg($srcFile); // لـ JPEG $destImage = imagecreatetruecolor($newWidth, $newHeight);

// النسخ وتغيير الحجم imagecopyresampled($destImage, $srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

// حفظ النتيجة imagejpeg($destImage, $destFile, 90); // جودة 90%

// تنظيف الذاكرة imagedestroy($srcImage); imagedestroy($destImage);}

// مثال على الاستخدامresizeImage('photo.jpg', 'photo_thumb.jpg', 300);?>


للعمل مع PNG أو GIF، يجب استخدام الدوال imagecreatefrompng() و imagecreatefromgif()، وكذلك الحفظ عبر imagepng() أو imagegif().



1.2. قص الصورة (crop) من المنتصف



غالبًا ما يكون مطلوبًا ليس فقط التصغير، بل قص منطقة مربعة من وسط الصورة. وهذا ما يسمى بالقص المركزي.



<?phpfunction cropCenter($srcFile, $destFile, $cropSize) {    list($width, $height, $type) = getimagesize($srcFile);

// تحديد الإحداثيات لقص المربع من المنتصف $srcX = ($width - $cropSize) / 2; $srcY = ($height - $cropSize) / 2;

// إذا كانت الصورة أصغر من الحجم المطلوب، نقوم بقياسها فقط if ($width < $cropSize || $height < $cropSize) { $ratio = min($cropSize / $width, $cropSize / $height); $newWidth = $width * $ratio; $newHeight = $height * $ratio; $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); // تعبئة بخلفية بيضاء $white = imagecolorallocate($destImage, 255, 255, 255); imagefill($destImage, 0, 0, $white); // النسخ مع التوسيط imagecopyresampled($destImage, $srcImage, ($cropSize - $newWidth) / 2, ($cropSize - $newHeight) / 2, 0, 0, $newWidth, $newHeight, $width, $height); } else { $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); imagecopyresampled($destImage, $srcImage, 0, 0, $srcX, $srcY, $cropSize, $cropSize, $cropSize, $cropSize); }

imagejpeg($destImage, $destFile, 90); imagedestroy($srcImage); imagedestroy($destImage);}

// مثال: مربع 200x200 من المنتصفcropCenter('photo.jpg', 'photo_cropped.jpg', 200);?>


2. مكتبة Imagick (أداة متقدمة)



Imagick هي غلاف PHP للأداة القوية ImageMagick. وهي تقدم

توصيات