基于ImageMagick,批量(当前文件夹及子文件夹)处理图片压缩方法
批量上传图片到云服务器(例如七牛云),但不需要用这么高清的图片。
例如发文章在得物,小红书等平台时。
- 操作系统:windows 64位
- ImageMagick版本:v7
- 安装bash环境,可以直接下载git安装包含bash环境
- 下载地址(官网):Git (git-scm.com)
- 下载地址2:【Git下载】2021年最新官方正式版Git免费下载 - 腾讯软件中心官网 (qq.com)
- 注意事项:脚本文件名不能是中文
#批量把当前目录的jpg图片 分辨率下降至25%,质量下降一半成像
#假定文件名:batchCompressImagesIncludeSubFiles5050.sh
magick *.jpg -resize 50% -quality 50 op_%03d.jpg
说明:批量处理指定文件夹及子文件夹所有图片
指定目录及分辨率及质量三个参数
文件名:batchCompressImagesIncludeSubFilesWithParams.sh
#!/bin/bash
read_dir(){
echo 'start walk through dir of'$1
suffixJpg='.jpg'
suffixJpeg='.jpeg'
suffixPng='.png'
for file in `ls -a $1`
do
if [ -d $1"/"$file ]
then
if [[ $file != '.' && $file != '..' ]]
then
read_dir $1"/"$file
fi
else
echo $1"/"$file
if [[ ${file:0-4:4} == ${suffixJpg} || ${file:0-5:5} == ${suffixJpeg} ]]
then
magick $1"/"$file -resize $2% -quality $3% $1"/"op_$file
fi
if [[ ${file:0-4:4} == ${suffixPng} ]]
then
magick $1"/"$file -resize $2% -quality $3% $1"/"op_$file.jpg
fi
fi
done
echo 'walk complete for dir of'$1
}
read_dir $1 $2 $3
指定目录
文件名:batchCompressImagesIncludeSubFiles5050.sh
#!/bin/bash
read_dir(){
suffixJpg='.jpg'
suffixJpeg='.jpeg'
suffixPng='.png'
for file in `ls -a $1`
do
if [ -d $1"/"$file ]
then
if [[ $file != '.' && $file != '..' ]]
then
read_dir $1"/"$file
fi
else
echo $1"/"$file
if [[ ${file:0-4:4} == ${suffixJpg} || ${file:0-5:5} == ${suffixJpeg} ]]
then
magick $1"/"$file -resize 50% -quality 50 $1"/"op_$file
fi
if [[ ${file:0-4:4} == ${suffixPng} ]]
then
magick $1"/"$file -resize 50% -quality 50 $1"/"op_$file.jpg
fi
fi
done
}
read_dir $1
文件名:runCompressSubFiles.sh
#.代表当前所在目录
batchCompressImagesIncludeSubFiles5050.sh .
- 打开git bash
- 输入runCompressSubFiles onedir
- 回车
压缩后的图片和原图,眼睛上看差别几乎没有(由于现在手机拍照像素高,拍出来5M起)。
文件名 | 原图大小 | 压缩后大小 | 压缩率 |
---|---|---|---|
four.jpg | 9282 KB | 307 KB | 3.31% |
one.jpg | 6433 KB | 364 KB | 5.66% |
two.png | 24846 KB | 739 KB | 2.97% |