You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux下批量调整单边超限定值图片尺寸的实现方案求助

实现批量按比例缩放图片的Bash脚本方案

没问题,结合你的需求和Bash基础,我给你整理了一套实用的脚本方案,完全基于ImageMagick和Bash命令实现,步骤清晰且容易上手:

前置准备

首先确保你的系统已经安装了ImageMagick工具包,里面的identify(用于获取图片尺寸)和convert(用于调整图片)是核心命令。如果没安装,用包管理器安装即可:

  • Debian/Ubuntu 系:sudo apt install imagemagick
  • CentOS/RHEL 系:sudo dnf install imagemagick

完整脚本实现

下面是脚本代码,我加了详细注释,你只需修改MAX_DIMENSION的值为你需要的X像素即可直接使用:

#!/bin/bash

# 配置:设置允许的最大像素尺寸(替换成你的X值)
MAX_DIMENSION=1920

# 遍历当前目录及所有子目录下的常见图片格式
# 可以根据需要添加更多格式,比如.webp、.bmp等
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" \) | while read -r IMAGE_FILE; do
    # 用identify命令提取图片的宽度和高度
    WIDTH=$(identify -format "%w" "$IMAGE_FILE")
    HEIGHT=$(identify -format "%h" "$IMAGE_FILE")

    # 判断是否需要调整尺寸:宽或高任一超过设定值
    if [ "$WIDTH" -gt "$MAX_DIMENSION" ] || [ "$HEIGHT" -gt "$MAX_DIMENSION" ]; then
        echo "处理中: $IMAGE_FILE (原尺寸: ${WIDTH}x${HEIGHT})"
        
        # 创建临时文件存放转换后的图片,避免转换失败损坏原文件
        TEMP_FILE=$(mktemp)
        
        # 执行缩放:保持宽高比,仅当图片超过设定尺寸时缩小,">"表示不放大
        convert "$IMAGE_FILE" -resize "${MAX_DIMENSION}x${MAX_DIMENSION}>" "$TEMP_FILE"
        
        # 检查转换是否成功,成功则替换原文件
        if [ $? -eq 0 ]; then
            mv "$TEMP_FILE" "$IMAGE_FILE"
            echo "处理完成: $IMAGE_FILE"
        else
            echo "处理失败: $IMAGE_FILE"
            rm "$TEMP_FILE"  # 清理临时文件
        fi
    else
        echo "无需处理: $IMAGE_FILE (尺寸: ${WIDTH}x${HEIGHT})"
    fi
done

关键细节解释

  • 遍历文件:用find命令递归查找所有图片,-iname不区分文件名大小写,确保能匹配到JPGPng这类格式。
  • 尺寸检测identify -format "%w"%h分别提取宽度和高度数值,轻量高效。
  • 安全替换:用临时文件过渡是核心,如果convert命令执行失败(比如文件损坏),原文件不会被覆盖,避免数据丢失。
  • 缩放规则-resize "${MAX_DIMENSION}x${MAX_DIMENSION}>"中的>符号是ImageMagick的特殊语法,意思是仅当图片的宽或高超过设定值时才缩放,并且严格保持宽高比,不会拉伸变形。

使用注意事项

  1. 先测试:建议先找一个包含测试图片的目录运行脚本,确认效果后再处理重要文件。
  2. 备份文件:如果处理的是珍贵图片,最好先做一次完整备份,避免意外。
  3. 格式扩展:如果需要支持更多图片格式,直接在find的条件里添加,比如-o -iname "*.webp"
  4. 权限问题:确保脚本有读写目标图片文件的权限,如果是系统目录下的文件,可能需要加sudo运行。

内容的提问来源于stack exchange,提问作者Helmi

火山引擎 最新活动