PHP 调整 Gif 图片播放速度

GIF速度由​​帧延迟时间​​(duration)决定,修改该值即可调整速度。加速需减小数值,减速则增大数值。

以 PHP 代码为例:

$imagick = new \Imagick('input.gif');
foreach ($imagick as $frame) {
    $frame->setImageDelay(20); // 加速:减小数值(如 20ms)
}
$imagick->writeImages('fast.gif', true);
  • 关键参数说明

setDelay / setImageDelay:控制每帧的显示时间,单位是毫秒(ms)。默认值通常为 100ms(10帧/秒)。

加速:减小数值(如 50ms);

减速:增大数值(如 200ms)。

    /**
     * 调整 gif 播放速度
     * 若 gif 每帧延时 0 毫秒则将其改为 10 毫秒
     * 防止gif图片和播放器都没有设置播放速度导致快速播放的情况
     * @param $imgData
     * @return Imagick|mixed
     */
    public function gifAdjustPlaySpeed($imgData): mixed
    {
        try {
            $imagick = new Imagick();
            $imagick->readImageBlob($imgData);
            $imagick->setIteratorIndex(0); // 确保从第一帧开始
            // 遍历每一帧并调整延迟时间
            foreach ($imagick as $frame) {
                $delay = $frame->getImageDelay(); // 获取当前帧的延迟时间
                if ($delay <= 0) {
                    $frame->setImageDelay(10); // 每帧延时 10 毫秒
                }
            }
            return $imagick->getImagesBlob();
        } catch (Throwable $e) {
            dp($e->getMessage(), $e->getTraceAsString());
            return $imgData;
        }
    }