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 शक्तिशाली ImageMagick उपयोगिता के लिए एक PHP रैपर है। यह पूर्व