【gpt搬运】bash脚本压缩png,jpg图片,当图片大小大于60kb或者尺寸大于500px*500px的时候

在这个任务中,Bash 脚本需要检查图片的文件大小和尺寸(宽度和高度),然后决定是否压缩图片。我们可以继续使用 jpegoptimpngquant 来压缩 .jpg.png 图片。为了检查图片的尺寸,使用 imagemagickidentify 命令来获取宽度和高度。

准备工具:

  • 安装 imagemagick:用于检查图片的宽高和处理图片。
  • 安装 jpegoptim:用于压缩 .jpg 图片。
  • 安装 pngquant:用于压缩 .png 图片。

安装命令(适用于 Debian/Ubuntu 系列 Linux):

sudo apt-get update
sudo apt-get install imagemagick jpegoptim pngquant

脚本内容:

#!/bin/bash

# 压缩JPG图片
compress_jpg() {
    local file="$1"
    echo "压缩JPG文件: $file"
    jpegoptim --max=85 "$file"  # 将质量降低到85%,根据需要调整
}

# 压缩PNG图片
compress_png() {
    local file="$1"
    echo "压缩PNG文件: $file"
    pngquant --ext .png --force 128 "$file"  # 将颜色数量减少到128
}

# 检查文件大小和尺寸
check_and_compress() {
    local file="$1"
    
    # 获取文件大小
    filesize=$(stat -c%s "$file")
    
    # 获取图片的宽高信息 (使用ImageMagick的identify)
    dimensions=$(identify -format "%w %h" "$file")
    width=$(echo $dimensions | cut -d' ' -f1)
    height=$(echo $dimensions | cut -d' ' -f2)
    
    # 检查文件大小是否大于60KB,或者宽高是否大于500px
    if [ $filesize -gt 61440 ] || [ $width -gt 500 ] || [ $height -gt 500 ]; then
        echo "文件大小或尺寸超过限制,进行压缩: $file"
        
        # 根据文件类型调用不同的压缩方法
        if [[ $file == *.jpg || $file == *.jpeg ]]; then
            compress_jpg "$file"
        elif [[ $file == *.png ]]; then
            compress_png "$file"
        fi
    else
        echo "$file 大小和尺寸均符合要求,无需压缩"
    fi
}

# 查找并处理图片
find . \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" \) -type f | while read file; do
    check_and_compress "$file"
done

echo "压缩完成!"

脚本说明:

  1. check_and_compress 函数

    • 获取图片文件大小(字节为单位)。
    • 使用 identify 获取图片的宽度和高度。
    • 检查图片的大小是否大于 60KB,或宽度/高度是否大于 500px。
    • 如果条件满足,调用 compress_jpgcompress_png 进行压缩。
  2. 压缩函数

    • .jpg 文件使用 jpegoptim 进行压缩,降低质量到 85%。
    • .png 文件使用 pngquant 进行压缩,颜色减少到 128 色。
  3. 查找和处理

    • 使用 find 查找当前目录下的 .jpg, .jpeg, .png 文件。
    • 对每个文件调用 check_and_compress 进行检查和压缩。

使用方法:

将脚本保存为 compress_images.sh,然后给予执行权限并运行:

chmod +x compress_images.sh
./compress_images.sh

脚本执行结果:

该脚本会自动处理当前目录下的图片,判断文件大小和分辨率是否超出规定,并对超出限制的图片进行压缩处理。

 

posted @ 2024-10-12 09:25  imzhi  阅读(11)  评论(0编辑  收藏  举报