PHP में इमेज प्रोसेसिंग: Resize, Crop और ऑप्टिमाइज़ेशन
वेब एप्लिकेशन डेवलपमेंट में इमेज प्रोसेसिंग एक महत्वपूर्ण कार्य है। चाहे वह यूज़र के अवतार हों, न्यूज़ के थंबनेल हों या प्रोडक्ट गैलरी — आपको लगभग हमेशा इमेज का आकार बदलना (resize) और इमेज को क्रॉप (crop) करना पड़ता है। PHP में इसके लिए दो मुख्य लाइब्रेरी हैं: GD (बिल्ट-इन) और Imagick (ImageMagick पर आधारित एक्सटेंशन)।
इस लेख में हम दोनों तरीकों को समझेंगे, काम करने वाले कोड उदाहरण दिखाएंगे और बताएंगे कि आपके प्रोजेक्ट के लिए कौन सी लाइब्रेरी बेहतर है।
1. GD लाइब्रेरी (GDLib)
GD एक मानक PHP एक्सटेंशन है जो लगभग सभी होस्टिंग पर उपलब्ध है। यह मुख्य फॉर्मेट को सपोर्ट करता है: JPEG, PNG, GIF, WEBP (PHP 7.1+ से)। इसकी कमी यह है कि Imagick की तुलना में रीसैम्पलिंग क्वालिटी थोड़ी कम होती है, लेकिन अधिकांश कार्यों के लिए यह पर्याप्त है।
1.1. GD से आकार बदलना (resize)
imagecopyresampled() फंक्शन इंटरपोलेशन (स्मूथिंग) के साथ एक नई इमेज बनाता है। यहाँ 300px चौड़ाई तक स्केल करने का उदाहरण है, जो अनुपात बनाए रखता है:
<?php
function resizeImageGD($srcFile, $destFile, $newWidth = 300) {
// मूल इमेज के आयाम प्राप्त करें
list($width, $height, $type) = getimagesize($srcFile);
// टाइप के अनुसार मूल इमेज का रिसोर्स बनाएँ
switch ($type) {
case IMAGETYPE_JPEG:
$src = imagecreatefromjpeg($srcFile);
break;
case IMAGETYPE_PNG:
$src = imagecreatefrompng($srcFile);
break;
case IMAGETYPE_GIF:
$src = imagecreatefromgif($srcFile);
break;
default:
return false;
}
// नई ऊँचाई की गणना अनुपात के अनुसार करें
$ratio = $width / $height;
$newHeight = intval($newWidth / $ratio);
// आवश्यक आकार की एक खाली इमेज बनाएँ
$dst = imagecreatetruecolor($newWidth, $newHeight);
// PNG/GIF के लिए अल्फा चैनल सक्षम करें
imagealphablending($dst, false);
imagesavealpha($dst, true);
// रीसैम्पलिंग (पिक्सेल पुनर्गणना के साथ कॉपी करना)
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// परिणाम सेव करें
imagejpeg($dst, $destFile, 85); // क्वालिटी 85%
// मेमोरी खाली करें
imagedestroy($src);
imagedestroy($dst);
return true;
}
// उपयोग:
resizeImageGD('photo.jpg', 'photo_thumb.jpg', 300);
?>
1.2. GD से क्रॉप (crop) करना
क्रॉप करने के लिए हम imagecopy() या imagecopyresampled() फंक्शन का उपयोग क्षेत्र निर्दिष्ट करके करते हैं। उदाहरण — बीच से 200x200 का वर्ग काटना:
<?php
function cropCenterGD($srcFile, $destFile, $cropSize = 200) {
list($width, $height, $type) = getimagesize($srcFile);
// टाइप निर्धारित करें
$src = imagecreatefromjpeg($srcFile); // उदाहरण के लिए JPEG
// बीच के वर्ग के निर्देशांक की गणना करें
$x = ($width - $cropSize) / 2;
$y = ($height - $cropSize) / 2;
// अगर मूल इमेज क्रॉप साइज़ से छोटी है — तो क्रॉप न करें
if ($width < $cropSize || $height < $cropSize) {
$cropSize = min($width, $height);
$x = 0;
$y = 0;
}
$dst = imagecreatetruecolor($cropSize, $cropSize);
imagecopy($dst, $src, 0, 0, $x, $y, $cropSize, $cropSize);
imagejpeg($dst, $destFile, 90);
imagedestroy($src);
imagedestroy($dst);
}
cropCenterGD('photo.jpg', 'cropped.jpg', 200);
?>
2. Imagick लाइब्रेरी
Imagick एक शक्तिशाली एक्सटेंशन है जो ImageMagick के लिए ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस प्रदान करता है। यह 200 से अधिक फॉर्मेट, उत्कृष्ट रीसैम्पलिंग क्वालिटी, रंगों, फ़िल्टर और एनिमेशन के साथ काम करने का समर्थन करता है। इसे सर्वर पर इंस्टॉल करना आवश्यक है (सस्ती होस्टिंग पर हमेशा उपलब्ध नहीं)।
2.1. Imagick से आकार बदलना (resize)
resizeImage() मेथड