ThinkPHP 6.0 图片处理需安装 think-image 扩展,使用 thinkimageImage 类;缩略图推荐 THUMB_CENTER 模式,水印须用 32 位 PNG 并链式调用 alpha(),文字水印依赖绝对路径字体与 FreeType 支持;GD 驱动不支持 GIF 动画和高倍抗锯齿,超大图建议切换 Imagick 驱动。
ThinkPHP 6.0 默认不带图片处理能力,必须通过 composer require topthink/think-image 安装扩展,并使用 thinkimageImage 类(注意命名空间是小写 thinkimage,不是旧版的 ThinkImage)。GD 库是默认驱动,适用于常规缩略图和水印需求,但需注意格式、透明度和内存控制等细节。
TP6 的 thumb() 方法默认等比缩放,但多数业务场景要求固定尺寸(如列表页统一 200×150)。若不指定 mode,结果可能留白、变形或失真。
$img->thumb(200, 150, thinkimageImage::THUMB_FIXED):强制拉伸,适合对比例无要求的场景(如后台预览)$img->thumb(200, 150, thinkimageImage::THUMB_FILLED):等比缩放后填充背景色(默认黑色,可用 ->background('#ffffff') 改)$img->thumb(200, 150, thinkimageImage::THUMB_CENTER):等比缩放后居中裁剪——最常用,推荐用于封面图、商品图注意:thumb() 不校验原图尺寸。若原图仅 100×100 却调用 thumb(1000, 1000),会放大失真但不报错。
水印失败的主因是三要素没配齐:水印图格式、位置常量、透明度设置。
立即学习“PHP免费学习笔记(深入)”;
thinkimageImage::WATER_SOUTHEAST(右下角),不是 IMAGE_WATER_SOUTHEAST(那是 TP5)->alpha(70),且必须在 water() 之后、save() 之前Allowed memory size exhausted
文字水印比图片水印更易出错,核心依赖系统级支持与路径规范。
__DIR__ . '/fonts/simhei.ttf';避免用 getcwd() 或相对路径--with-freetype),否则 imagettftext() 直接失败imagestring() 不支持中文,也不支持抗锯齿'#333333'),透明度通过 alpha 参数控制(0–100)$img->fontWidth($font, $size) 获取真实宽度,再结合 width()/height() 计算坐标TP6 的 think-image 默认使用 GD 驱动,它轻量、兼容性好,但有明确局限:
new thinkimageImage(thinkimageImage::DRIVER_IMAGICK, $srcPath),前提是服务器已安装 imagick 扩展每次操作后记得调用 save() 并确保资源释放;若用命令行批量处理,建议配合 gc_collect_cycles() 主动回收内存。