php实现图片旋转
PHP实现图片旋转的方法
使用PHP的GD库可以轻松实现图片旋转功能。GD库是PHP处理图像的扩展,支持多种图像格式如JPEG、PNG、GIF等。
安装GD库
确保服务器已安装GD库扩展。可以通过phpinfo()函数查看是否已启用GD库。若未安装,需在php.ini中取消注释或添加以下行:
extension=gd
基本旋转函数
使用imagerotate()函数实现图片旋转。该函数需要以下参数:
- 源图像资源
- 旋转角度(0-360度)
- 背景颜色(旋转后空白区域填充色)
- 是否忽略透明色(仅对PNG有效)
$sourceImage = imagecreatefromjpeg('input.jpg');
$rotatedImage = imagerotate($sourceImage, 45, 0);
imagejpeg($rotatedImage, 'output.jpg');
imagedestroy($sourceImage);
imagedestroy($rotatedImage);
处理不同格式图片
根据输入图片格式使用对应的创建函数:

- JPEG:
imagecreatefromjpeg() - PNG:
imagecreatefrompng() - GIF:
imagecreatefromgif()
保存时也需使用对应的输出函数:
- JPEG:
imagejpeg() - PNG:
imagepng() - GIF:
imagegif()
保留透明背景
对于PNG图片,需设置透明背景并处理透明度:

$sourceImage = imagecreatefrompng('input.png');
imagealphablending($sourceImage, false);
imagesavealpha($sourceImage, true);
$rotatedImage = imagerotate($sourceImage, 30, imagecolorallocatealpha($sourceImage, 0, 0, 0, 127));
imagealphablending($rotatedImage, false);
imagesavealpha($rotatedImage, true);
imagepng($rotatedImage, 'output.png');
完整示例代码
以下是一个完整的图片旋转函数示例:
function rotateImage($inputPath, $outputPath, $degrees) {
$extension = strtolower(pathinfo($inputPath, PATHINFO_EXTENSION));
switch($extension) {
case 'jpg':
case 'jpeg':
$sourceImage = imagecreatefromjpeg($inputPath);
break;
case 'png':
$sourceImage = imagecreatefrompng($inputPath);
imagealphablending($sourceImage, false);
imagesavealpha($sourceImage, true);
break;
case 'gif':
$sourceImage = imagecreatefromgif($inputPath);
break;
default:
return false;
}
$rotatedImage = imagerotate($sourceImage, $degrees, 0);
switch($extension) {
case 'jpg':
case 'jpeg':
imagejpeg($rotatedImage, $outputPath);
break;
case 'png':
imagealphablending($rotatedImage, false);
imagesavealpha($rotatedImage, true);
imagepng($rotatedImage, $outputPath);
break;
case 'gif':
imagegif($rotatedImage, $outputPath);
break;
}
imagedestroy($sourceImage);
imagedestroy($rotatedImage);
return true;
}
注意事项
旋转角度以度为单位,正数表示逆时针旋转,负数表示顺时针旋转。旋转后的图像尺寸会根据角度变化,可能大于原图。
对于大尺寸图片,旋转操作可能消耗较多内存,建议在处理前检查内存限制或使用ini_set('memory_limit', '256M')临时增加内存分配。
旋转后的图像质量可能略有下降,特别是JPEG格式。可以调整imagejpeg()的质量参数(0-100)来优化输出。






