Linux压缩图片

在Linux系统中,直接通过命令行工具来压缩图片大小(即减小图片的分辨率或文件体积)并不是一件直接的事情,因为大多数命令行图像处理工具(如convert来自ImageMagick,mogrify,sips(仅限macOS),jpegoptim,pngcrush等)主要用于转换图片格式、优化现有图片质量而不损失太多可见度,或者调整图片的尺寸(即分辨率),而不是直接“压缩”图片以减小文件大小,同时保持原有分辨率。

不过,你可以通过调整图片的尺寸或使用优化工具来减小图片的文件大小。以下是几种方法:

ImageMagick

使用ImageMagick调整图片尺寸

如果你想要减小图片的文件大小,一个常见的方法是减小图片的分辨率(即尺寸)。你可以使用convert命令来实现这一点:

convert original.jpg -resize 800x600 output.jpg

这条命令会将original.jpg调整到800x600像素的大小,并保存为output.jpg。注意,这会改变图片的分辨率,因此可能会影响图片的视觉质量。

使用ImageMagick优化图片质量

如果你想要保持图片的分辨率,但想要减小文件大小,可以尝试使用ImageMagick的优化功能,但这通常意味着在视觉上会有一定的质量损失:

convert original.jpg -quality 85 output.jpg

这条命令将original.jpg保存为output.jpg,同时将JPEG的质量因子设置为85(范围从0到100)。较低的质量因子会导致文件大小更小,但视觉质量也会下降。

ImageMagick的安装

ImageMagick是一个功能强大的图片处理工具,支持多种图片格式和转换操作。

# Debian/Ubuntu及其衍生版:
sudo apt update  
sudo apt install ImageMagick

#Fedora:
sudo dnf install ImageMagick

# CentOS/RHEL(可能需要启用EPEL仓库):
sudo yum install epel-release  
sudo yum install ImageMagick


# Arch Linux:
sudo pacman -S ImageMagick

使用专门的图片压缩工具

还有一些专门的图片压缩工具,如jpegoptim、pngquant等,它们专为压缩JPEG或PNG图片设计,能够在保持较高视觉质量的同时减小文件大小:

jpegoptim:用于优化JPEG图片。

jpegoptim --max=85 original.jpg

这会尝试将original.jpg压缩到尽可能小的体积,同时保持JPEG质量因子不超过85。

pngquant:用于压缩PNG图片到8位颜色深度。

pngquant --quality=80-90 original.png -o output.png

这会将original.png转换为8位PNG,并尽量保持视觉质量在80到90的范围内。

注意
压缩图片时,请确保你理解这些操作对图片质量和文件大小的影响。
不同的图片格式和压缩算法有不同的特点和优势,因此你可能需要根据具体情况选择合适的工具和方法。
备份原始图片是一个好习惯,以防在压缩过程中发生不可预见的问题。

jpegoptim的安装

jpegoptim是一个用于优化JPEG文件的工具,可以减少文件大小而不显著影响视觉质量。

# Debian/Ubuntu及其衍生版:
# jpegoptim可能不在默认仓库中,但可以从源代码编译或查找是否有第三方仓库提供。

#Fedora:
#Fedora的仓库中可能不包含jpegoptim,但可以尝试从源代码编译。

# CentOS/RHEL:
# 可以通过启用EPEL仓库来安装jpegoptim:
sudo yum install epel-release  
sudo yum install jpegoptim

pngquant的安装

pngquant是一个用于将PNG图片转换为高质量、低大小的8位PNG图片的工具。

# Debian/Ubuntu及其衍生版:
# 在Ubuntu上,需要启用Universe仓库来安装pngquant:
sudo add-apt-repository universe  
sudo apt update  
sudo apt install pngquant

# Fedora:
sudo dnf install pngquant

# CentOS/RHEL(可能需要启用EPEL仓库):

sudo yum install epel-release  
sudo yum install pngquant

# Arch Linux:
sudo pacman -S pngquant

批量处理脚本

批量压缩jpg png jpeg格式的图片,按照压缩比85进行压缩

#!/bin/bash

# 定义源文件夹路径
SOURCE_DIR="/home/ruoyi/resource"
# 定义目标文件夹路径
DEST_DIR="/root/ruoyi/imgnew"

# 确保目标文件夹存在
mkdir -p "$DEST_DIR"

# 遍历源文件夹内的所有 .jpg .jpeg .png 文件
for file in "$SOURCE_DIR"/*.jpg "$SOURCE_DIR"/*.jpeg "$SOURCE_DIR"/*.png; do
    # 检查文件是否存在
    if [ -f "$file" ]; then
        # 获取文件名(不包含路径)
        filename="${file##*/}"
      
        # 定义输出文件的完整路径和名称
        output_file="$DEST_DIR/$filename"
      
        # 使用 ImageMagick 的 convert 命令压缩图片质量
        convert "$file" -quality 85 "$output_file"
      
        echo "Processed $file and saved as $output_file"
    fi
done

echo "All JPEG files have been processed and saved."

将压缩好之后的图片文件覆盖会源文件夹

yes | cp -fv /home/ruoyi/imgnew/* /home/ruoyi/resource/

参数解释:
yes:yes 命令会自动输入 y(表示确认),与 cp 命令结合使用,可以自动确认所有覆盖提示
-f:强制覆盖目标文件,无需提示。
-v:显示详细的操作过程,输出每个复制的文件路径。