使用PHP-GD可通过imagecopyresampled()实现图片裁剪与强制拉伸。1. 创建源图像资源并获取尺寸;2. 设定裁剪区域(x,y,width,height);3. 创建目标画布(指定宽高,如200×150);4. 调用imagecopyresampled()将源区域拉伸填充至目标画布,参数中源与目标尺寸不同即实现非等比变形。示例代码包含JPEG处理流程,支持自定义裁剪起点与输出尺寸。注意事项:操作会导致图像变形,适用于固定尺寸展示场景;需确保GD库启用;根据图片类型选用imagecreatefrompng/gif等函数;若仅整体拉伸,源区域设为全图即可。核心在于灵活配置函数参数以实现任意裁剪拉伸效果。
PHP-GD 实现图片裁剪和拉伸,尤其是不按比例缩放(即强制拉伸),主要通过 imagecopyresampled() 函数完成。该函数可以将源图像的某一部分复制到目标图像,并在过程中进行缩放。只要指定的目标宽高与原图不成比例,就会实现“非等比”裁剪或拉伸。
1. 不按比例裁剪并拉伸图片
假设你有一张原始图片,想从中裁剪出某个区域,然后将其拉伸为指定尺寸(如 200×150),即使这会变形。
使用步骤如下:
创建源图像资源(支持 JPEG、PNG 等) 定义裁剪区域(x, y, 宽, 高) 创建目标画布(新尺寸) 用 imagecopyresampled() 将裁剪区域拉伸填充到目标画布示例代码:
立即学习“PHP免费学习笔记(深入)”;

喜马拉雅旗下的一站式AI音频创作平台,强大的在线剪辑能力,帮你轻松创作优秀的音频作品


// 原始图片路径$src_image = 'photo.jpg';$dest_image = 'cropped_stretched.jpg';// 获取原图信息list($width, $height) = getimagesize($src_image);// 创建源图像资源$src = imagecreatefromjpeg($src_image);// 裁剪参数:从 (50, 50) 开始,裁剪 300x200 区域$src_x = 50;$src_y = 50;$src_w = 300;$src_h = 200;// 目标尺寸:强制拉伸为 200x150(非等比)$dst_w = 200;$dst_h = 150;// 创建目标图像资源$dst = imagecreatetruecolor($dst_w, $dst_h);// 执行裁剪 + 拉伸imagecopyresampled( $dst, // 目标图像 $src, // 源图像 0, 0, // 目标起点 (x, y) $src_x, $src_y, // 源起点 (x, y) $dst_w, $dst_h, // 目标区域宽高 $src_w, $src_h // 源区域宽高);// 保存结果imagejpeg($dst, $dest_image, 90);// 释放内存imagedestroy($src);imagedestroy($dst);echo "图片已裁剪并拉伸保存为: $dest_image";登录后复制
2. 注意事项
这种操作会导致图像变形,因为宽高比被强行改变。适合用于需要固定尺寸展示的场景(如头像框、广告位),但不适合对画质要求高的用途。
确保 GD 库已启用:php.ini 中开启 extension=gd 根据图片类型选择正确的创建函数:imagecreatefrompng、imagecreatefromgif 等 目标尺寸可任意设置,不受原图比例限制3. 只缩放不裁剪(整体拉伸)
如果不需要裁剪,只是把整张图拉伸到新尺寸,只需将源区域设为全图:
// 源区域为整个图片imagecopyresampled( $dst, $src, 0, 0, 0, 0, $new_width, $new_height, $width, $height // 原图全尺寸);登录后复制基本上就这些。关键是控制 imagecopyresampled 的参数,灵活设定源和目标的矩形区域,就能实现任意裁剪+拉伸效果,包括非等比变形。
以上就是php-gd怎样实现图片裁剪拉伸_php-gd不按比例裁剪缩放的详细内容,更多请关注php中文网其它相关文章!