首先创建透明圆形蒙版,再将方形图片按蒙版合成。具体步骤:1. 检查GD扩展是否启用;2. 创建圆形裁剪函数makeCircleImage,读取输入图像并生成等尺寸画布;3. 创建透明背景与圆形遮罩,使用imagefilledellipse绘制白色圆形;4. 通过遍历像素应用遮罩,保留圆形区域内图像;5. 输出PNG格式图像并释放资源;6. 调用函数传入原图路径和输出路径即可生成圆形头像。注意输入图为正方形以保证效果,输出为PNG支持透明,高性能场景需缓存结果。
使用 PHP-GD 将方形图片裁剪成圆形,核心思路是创建一个透明的圆形蒙版,然后将原图按圆形区域进行合成。以下是具体实现方法。
1. 检查 GD 扩展是否启用
确保服务器已安装并启用了 GD 扩展,特别是支持透明 PNG 的功能。可以通过以下代码检查:
phpinfo(); 查看是否有 GD 支持,或运行:
if (extension_loaded('gd')) { echo "GD 已启用"; }
立即学习“PHP免费学习笔记(深入)”;

利用AI轻松变形、风格化和重绘任何图像


2. 创建圆形裁剪函数
下面是一个完整的函数,输入方形图片路径,输出圆形图片(PNG 格式,保留透明背景):
function makeCircleImage($inputPath, $outputPath) {
$src = imagecreatefromstring(file_get_contents($inputPath));
$size = min(imagesx($src), imagesy($src));
$circle = imagecreatetruecolor($size, $size);
// 启用 alpha 通道
imagealphablending($circle, false);
imagesavealpha($circle, true);
// 创建透明背景
$transparent = imagecolorallocatealpha($circle, 0, 0, 0, 127);
imagefill($circle, 0, 0, $transparent);
// 缩放原图到目标尺寸
$resized = imagecreatetruecolor($size, $size);
imagecopyresampled($resized, $src, 0, 0, 0, 0, $size, $size, imagesx($src), imagesy($src));
// 创建圆形遮罩
$mask = imagecreatetruecolor($size, $size);
imagealphablending($mask, false);
imagesavealpha($mask, true);
$black = imagecolorallocatealpha($mask, 0, 0, 0, 127);
imagefill($mask, 0, 0, $black);
$white = imagecolorallocatealpha($mask, 255, 255, 255, 0);
$radius = $size / 2;
imagefilledellipse($mask, $radius, $radius, $size, $size, $white);
// 应用遮罩
for ($x = 0; $x < $size; $x++) {
for ($y = 0; $y < $size; $y++) {
$alpha = (imagecolorat($mask, $x, $y) & 0xFF000000) >> 24;
if ($alpha === 127) {
imagefill($circle, $x, $y, $transparent);
} else {
imagecopy($circle, $resized, $x, $y, $x, $y, 1, 1);
}
}
}
// 输出为 PNG
imagepng($circle, $outputPath);
// 释放内存
imagedestroy($src);
imagedestroy($resized);
imagedestroy($mask);
imagedestroy($circle);
}
3. 调用示例
使用该函数将一张方形头像转为圆形:
makeCircleImage('avatar.jpg', 'circle_avatar.png');
// 浏览器查看 circle_avatar.png 即为圆形图像
4. 注意事项
输入图片最好是正方形,如果不是,可先中心裁剪为正方形再处理。 输出必须保存为 PNG 格式以支持透明背景。 性能要求高时建议缓存结果,避免重复生成。 GD 不支持矢量操作,复杂图形建议使用 ImageMagick。基本上就这些。只要理解“用圆形遮罩控制像素显示”,就能灵活实现各种形状裁剪。以上就是php-gd如何将图片变圆形_php-gd将方形图裁剪成圆的详细内容,更多请关注php中文网其它相关文章!