add_filter('wp_image_editors', function () { return ['WP_Image_Editor_Imagick']; });
identify -format '%n frames\n' animated.gif
一张 2.3MB 的循环 GIF 上传后变成静止图,媒体库显示 800×450,文件大小 96KB。用 identify 看只剩一帧,原图有 48 帧。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:WordPress 默认用 GD 做图片编辑,GD 处理 GIF 时只取第一帧,动画帧全部丢弃。Imagick 支持多帧,但服务器没装对应扩展或者被强制指定成 GD。
「GIF 动画丢失」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
处理上按这个顺序:确认 wp_image_editors 选的是 Imagick 而不是 GD;给 GIF 单独放行 跳过缩略图生成 避免被编辑器碰过;必须生成缩略图时用 Imagick 并显式保留帧。
确认没问题再收工,重新上传后 identify 显示 48 frames,前台动图正常循环。
