centos系统压缩jpg/png/gif图片文件

安装压缩依赖库

yum install ImageMagick
yum install optipng

其中ImageMagick用于压缩jpg/png文件,gifsicle用于压缩gif文件,libwebp-devel用于压缩webp文件

执行压缩GIF文件命令

find -type f -name "*.gif" -size +100k -exec sh -c 'for gif_file do convert "$gif_file" -resize 50% -coalesce -layers OptimizeTransparency -colors 32 -compress LZW "$gif_file"; done' sh {} +

在上面的代码中,我们使用-layers OptimizeTransparency选项优化图像的层数,并使用-colors 32选项将图像的颜色深度减少到32色。这将有助于进一步减小文件大小,而不会对图像质量造成太大的影响。同时,我们也不再限制帧率,因此可以保留原始GIF文件的帧率。

需要注意的是,压缩后的文件将存储在原始文件的同一目录中,将覆盖原始文件

执行压缩JPG文件命令

find -type f -name '*.jpg' -size +100k -exec bash -c 'size=$(identify -format "%b" "{}" | awk "{ printf \"%.0f\", \$1 }"); if [ "$size" -gt 1000000 ]; then convert "{}" -quality 50% -define jpeg:preserve-settings "/tmp/${1##*/}_compressed.jpg"; elif [ "$size" -gt 500000 ]; then convert "{}" -quality 60% -define jpeg:preserve-settings "/tmp/${1##*/}_compressed.jpg"; else convert "{}" -quality 70% -define jpeg:preserve-settings "/tmp/${1##*/}.jpg"; fi && mv "/tmp/${1##*/}"* "${1}"' _ {} \;

这段代码是一个用于图片压缩的命令行脚本。下面是对这段代码的逐行解释:

  1. find -type f -name '*.jpg':查找当前目录及其子目录下所有以.jpg结尾的文件;
  2. -exec bash -c '...' _ {} \;:对于找到的每一个文件,执行后面的命令;
  3. size=$(identify -format "%b" "{}" | awk "{ printf \"%.0f\", \$1 }"):使用identify命令获取当前文件的大小,并使用awk命令将结果四舍五入为整数,然后将结果存储在size变量中;
  4. if [ "$size" -gt 1000000 ]; then ... elif [ "$size" -gt 500000 ]; then ... else ... fi:根据文件大小的不同,选择不同的压缩质量。如果文件大小大于1MB,则压缩质量为50%;如果文件大小大于500KB,则压缩质量为60%;否则,压缩质量为70%;
  5. convert "{}" -quality 50% -define jpeg:preserve-settings "/tmp/${1##*/}_compressed.jpg":使用convert命令将当前文件压缩成指定质量的JPEG格式,并将压缩后的文件存储在/tmp目录中;
  6. mv "/tmp/${1##*/}"* "${1}":将压缩后的文件移动到原始文件所在的目录,并保留原始文件名。

总体来说,这段代码的作用是对指定目录下的所有JPEG图片进行压缩,以减小文件大小并节省存储空间。具体压缩质量的选择取决于每个文件的大小,压缩后的文件会被存储在/tmp目录中,并且会被重命名为原始文件名加上_compressed后缀。

执行压缩PNG文件命令

find . -type f -name "*.png" -print0 | xargs -0 -P "$(nproc)" optipng -o7

这段命令是用于在当前目录及其子目录中查找所有名字以 ".png" 结尾的文件,并使用 optipng 工具将这些文件以最高压缩级别进行压缩。

这个命令使用 find 命令来查找当前目录下所有以 .png 结尾的文件,并将它们的路径传递给 xargs 命令。 xargs 命令将文件路径分成多个子任务,并使用 -P 选项并发地运行这些子任务。

$(nproc) 表示使用当前计算机的 CPU 核心数量来设置并发任务的数量。这样可以利用多线程来加快处理速度。

下面是这个命令的具体解释:

  • find 是一个强大的命令行工具,用于在文件系统中查找满足指定条件的文件或目录。
  • . 表示从当前目录开始查找。
  • -type f 表示查找的是文件而不是目录。
  • -name "*.png" 表示查找名字以 ".png" 结尾的文件。
  • -exec 表示对于查找到的每一个文件执行指定的命令。
  • optipng -o7 "{}" 表示使用 optipng 工具将查找到的文件以最高压缩级别进行压缩。
  • \; 表示命令结束,必须加上。

在这个命令中,{} 是一个特殊的占位符,它会被 find 命令替换为查找到的每一个文件的路径。通过这种方式,我们可以在使用 optipng 压缩文件时指定文件的路径。

因此,这段命令的作用是查找当前目录及其子目录中所有名字以 ".png" 结尾的文件,并使用 optipng 工具将这些文件以最高压缩级别进行压缩。

版权声明:
作者:Lei钟意
链接:https://leixf.cn/archives/882
来源:跃动指尖
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录