电话
400 9058 355
PHP GD库可用imagecopyresampled()实现精确裁剪,需先加载源图资源、创建目标画布,注意坐标原点、图像类型、EXIF旋转校正及内存管理。
PHP 自带的 GD 库就能完成基础图片裁剪,无需额外扩展,但必须注意图像资源类型、坐标原点和内存管理。
imagecopyresampled() 实现精确裁剪这是最常用也最可控的方式,适合按指定坐标+宽高从原图抠出一块区域并缩放到目标尺寸(或保持原尺寸)。
imagecreatefromjpeg() / imagecreatefrompng() 等加载为资源,不能直接
imagecreatetruecolor() 创建,尺寸即你想要的裁剪后大小imagecopyresampled($dst, $src, 0, 0, $x, $y, $dst_w, $dst_h, $src_w, $src_h) 中的 $x 和 $y 是源图上的起始坐标(左上角),不是屏幕像素,也不是百分比$dst_w === $src_w 且 $dst_h === $src_h,但要注意 $x + $src_w 和 $y + $src_h 不能超出原图边界,否则结果为空白或报错[$src = imagecreatefromjpeg('photo.jpg');
$dst = imagecreatetruecolor(200, 150);
imagecopyresampled($dst, $src, 0, 0, 50, 30, 200, 150, 200, 150);
imagejpeg($dst, 'crop.jpg', 90);
imagedestroy($src);
imagedestroy($dst);]
GD 不支持 WebP(PHP 7.4+ 才有 imagecreatefromwebp),且 getimagesize() 返回的宽高可能和实际加载后不一致(比如旋转信息未被 GD 自动处理)。
getimagesize() 获取原始宽高和类型,再选对应加载函数;否则 imagecreatefrompng() 加载 JPEG 会失败exif_read_data() 判断是否含旋转标记(如 iPhone 拍照),必要时先用 imagerotate() 校正,否则裁剪区域偏移大图裁剪容易触发 Allowed memory size exhausted 或 Cannot allocate memory,尤其在共享主机上。
ini_set('memory_limit', '256M'),但更稳妥的是先用 imagescale($src, $max_width, $max_height, IMG_BILINEAR) 缩小原图再裁剪imagejpeg() 第二个参数为 null 时直接输出到浏览器,此时必须清空输出缓冲并设置 header('Content-Type: image/jpeg')
imagedestroy() 会导致内存持续占用,循环批量处理时极易崩溃真正麻烦的不是裁剪动作本身,而是源图格式杂、EXIF 旋转未归一、内存限制硬卡住——这些细节不提前兜底,代码上线后往往只在特定用户上传的某张照片上突然失效。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...