在PHP中,可以使用GD庫或Imagick擴展來實現圖像的縮放。以下是兩種方法的示例:
方法一:使用GD庫
function resizeImage($sourceImage, $destinationWidth, $destinationHeight, $savePath) {
// 獲取原始圖像尺寸
list($sourceWidth, $sourceHeight, $sourceType) = getimagesize($sourceImage);
// 根據原始圖像類型創(chuàng)建圖像資源
switch ($sourceType) {
case IMAGETYPE_GIF:
$sourceResource = imagecreatefromgif($sourceImage);
break;
case IMAGETYPE_JPEG:
$sourceResource = imagecreatefromjpeg($sourceImage);
break;
case IMAGETYPE_PNG:
$sourceResource = imagecreatefrompng($sourceImage);
break;
default:
return false;
}
// 創(chuàng)建一個空白畫布,用于保存縮放后的圖像
$destinationResource = imagecreatetruecolor($destinationWidth, $destinationHeight);
// 保持 PNG 和 GIF 圖像的透明度
if ($sourceType == IMAGETYPE_PNG || $sourceType == IMAGETYPE_GIF) {
imagealphablending($destinationResource, false);
imagesavealpha($destinationResource, true);
$transparent = imagecolorallocatealpha($destinationResource, 255, 255, 255, 127);
imagefilledrectangle($destinationResource, 0, 0, $destinationWidth, $destinationHeight, $transparent);
}
// 將原始圖像縮放到目標畫布上
imagecopyresampled($destinationResource, $sourceResource, 0, 0, 0, 0, $destinationWidth, $destinationHeight, $sourceWidth, $sourceHeight);
// 保存縮放后的圖像
switch ($sourceType) {
case IMAGETYPE_GIF:
imagegif($destinationResource, $savePath);
break;
case IMAGETYPE_JPEG:
imagejpeg($destinationResource, $savePath);
break;
case IMAGETYPE_PNG:
imagepng($destinationResource, $savePath);
break;
}
// 銷毀圖像資源
imagedestroy($sourceResource);
imagedestroy($destinationResource);
return true;
}
// 使用示例
$sourceImage = 'path/to/your/image.jpg';
$destinationWidth = 300;
$destinationHeight = 200;
$savePath = 'path/to/your/resized_image.jpg';
resizeImage($sourceImage, $destinationWidth, $destinationHeight, $savePath);
方法二:使用Imagick擴展
function resizeImage($sourceImage, $destinationWidth, $destinationHeight, $savePath) {
try {
// 創(chuàng)建Imagick對象
$sourceResource = new Imagick($sourceImage);
// 設置目標尺寸
$sourceResource->resizeImage($destinationWidth, $destinationHeight, Imagick::FILTER_LANCZOS, 1);
// 保存縮放后的圖像
$sourceResource->writeImage($savePath);
$sourceResource->clear();
$sourceResource->destroy();
return true;
} catch (Exception $e) {
return false;
}
}
// 使用示例
$sourceImage = 'path/to/your/image.jpg';
$destinationWidth = 300;
$destinationHeight = 200;
$savePath = 'path/to/your/resized_image.jpg';
resizeImage($sourceImage, $destinationWidth, $destinationHeight, $savePath);
請注意,這兩種方法都需要相應的圖像處理庫(GD庫或Imagick擴展)已經安裝并啟用。同時,確保您的PHP環(huán)境已經配置了這些庫。