amirrezam75/image-optimizer

使用PHP轻松优化图像

1.0.11 2021-07-11 10:14 UTC

This package is auto-updated.

Last update: 2024-09-11 18:09:15 UTC


README

composer require amirrezam75/image-optimizer

用法

(new Image('animated.gif'))->optimize();

您可以通过更改第一个参数来更改输出位置。

它使用gifsicle作为默认优化器;如果您需要使用另一个命令行工具来优化图像,只需编写自己的优化器并将其作为第二个参数传递。

优化器是任何实现了AmirRezaM75\ImageOptimizer\Optimizer接口的类。

(new Image('animated.gif'))->optimize('output-path', Optimizer $optimizer);

如果您希望将其转换为webm

$outputPath = (new Image('animated.gif'))
    ->optimize()
    ->convertToWebm();

它使用ffmpeg作为默认转换器。如果您需要使用另一个命令行工具来转换文件;创建一个实现了AmirRezaM75\ImageOptimizer\Converter接口的类。

(new Image('animated.gif'))->convert(Converter $converter);

优化工具

Gifsicle

选项

--batch, -b 在同一文件名中修改每个GIF输入,通过读取和写入相同的文件名。 (从标准输入读取的GIF写入到标准输出。)

-O[level], --optimize[=level] 为了空间优化输出GIF动画。级别决定了优化程度;级别越高,所需时间越长,但结果可能更好。

--lossy[=lossiness] 通过牺牲图像颜色来缩小输出文件大小,代价是出现伪影和噪声。失真度决定了允许的伪影数量;较高的值可以导致较小的文件大小,但会产生更多伪影。默认失真度为20。

-k[=num], --colors[=num] 将每个输出GIF中不同颜色的数量减少到num或更少。Num必须在2到256之间。这可以用于缩小输出GIF或消除任何局部颜色表。

-o [file], --output [file] 将输出发送到文件。特殊文件名‘-’表示标准输出。

--color-method [method] 确定如何选择更小的调色板。

  • 默认的‘diversity’,是xv(1)的多样性算法,它使用现有颜色的严格子集,通常会产生良好的结果。
  • blend-diversity’是这种算法的一种修改:一些颜色值从现有颜色组中混合。
  • median-cut’是Heckbert描述的中值切割算法。

安装

为了压缩gif文件,您需要安装Gifsicle v1.92+

git clone https://github.com/kohler/gifsicle

apt install automake make gcc build-essential

./bootstrap.shautoreconf -i

./configure

make

make install

转换工具

FFMPEG

选项

-i 指定输入文件

-r[:stream_specifier] 设置帧率(Hz值,分数或缩写)。

-c[:stream_specifier] codec -codec 选择一个编码器或解码器用于一个或多个流。

libvpx-vp9是WebM的VP9视频编码器

-crf 设置CRF值。必须在VP8中为4-63,或在VP9中为0-63。值越低,质量越高。推荐设置为10。有两种使用CRF的方式。

  • 要使用constant quality模式,您在指定视频比特率(-b:v 0)时必须使用“0”值。如果您完全删除“-b:v”选项,ffmpeg将回退到默认比特率(256K,我想),这将导致质量受限的编码,质量极差。constant quality模式试图达到...嗯...恒定的质量水平,使用必要的任何比特率来实现这一水平。这可能会导致非常大的文件大小,因此通常不适合制作用于图像板的WebM,这些图像板通常有10MB或更小的文件大小限制。
  • 要使用constrained quality模式,您必须指定CRF值(例如:-crf 10)和视频比特率值(例如:-b:v 1M)。约束质量模式将尝试达到一定质量水平,但不会超过指定的比特率。当使用-b:v而不使用-crf时,-b:v的值是目标比特率,但当同时使用-b:v和-crf时,-b:v变为最大比特率。这是一种在保持对文件大小控制的同时实现高质量的方法。理想情况下,应与双遍编码方法一起使用。

-b:v是允许的最大比特率。数值越高,质量越好。只有当您希望得到一个恒定比特率的文件时,才使用此选项。如果您希望得到更小的文件大小,请考虑不使用此选项。

-an禁用音频。

-qmin, -qmax:告诉ffmpeg在分配质量时使用哪个“量化参数”。如果您不知道量化参数是什么,请放心,我也不知道。我只知道,数值越小,质量越好。我相信-qmax选项防止任何给定帧的质量低于某个水平,从而使整体视频质量更加一致(它防止视频中出现质量极差的帧,画面全是马赛克)。

-qmin – 最小量化器(默认4,范围0–63)

-qmax – 最大量化器(默认63,范围qmin–63)

-vsync参数:视频同步方法。出于兼容性原因,旧值可以用数字指定。新增加的值必须始终以字符串形式指定。

  • cfr:将重复和丢弃帧以实现所需的恒定帧率。

如果需要修复最后帧的丢弃延迟,则需要此选项问题

安装

安装最新版本的ffmpeg。

sudo add-apt-repository ppa:savoury1/ffmpeg4

我们需要v4+,因为它使用libavcodec 58.91.100编码器,这正是我们所需要的

sudo apt-get update

sudo apt-get install ffmpeg

sudo apt-get install libvpx5

由于文件位置权限问题,我建议不要通过snap安装它