初衷
最近倒腾了Notion2markdown写作,上传了很多高清大图,但没想到 CDN 流量账单一路狂飙。。。
遂出此策,将封面图统一调小,另将图床上的图片批量压缩后重新上传,减少流量消耗(穷)。
实现步骤
对 Notion 上传的封面图片:
- 统一用
PowerToys
提供的Image Resizer
进行尺寸压缩,压缩到800×600px
进行替换
对于图床上的既有图片:
- 从图床批量打包下载原图
- 在
Linux
系统下(博主采用的WSL2/Ubuntu 22.04 TLS
),使用compress.sh
进行图片批量压缩,采用的图片质量为50%
,可自定义
- 重新上传到图床,覆盖原文件
- 原图打包丢网盘保存,备用
重新配置图床CDN
图片浏览器缓存时间,增加到 30 天,开启防盗链。
下面重点介绍压缩过程。
批量压缩
主要介绍采用compress.sh
脚本进行批量压缩的过程,其采用ImageMagick
命令对图片进行压缩。
compress.sh
脚本已共享,见源码。
执行方法如下:
1
| ./compress.sh <source_path> <output_path> [quality]
|
参数说明:
source_path
原图目录
output_path
压缩后图片保存位置
quality
压缩后的图片质量百分比,默认80%
以下是将source
文件夹下所有图片质量压缩到50%
,并输出到compressed
的命令行案例:
1
| ./compress.sh ./backups ./output 50
|
效果
本地
COS 腾讯云
compress.sh
所撰写的核心代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #!/bin/bash # # @Author: Dorad, ddxi@qq.com # @Date: 2023-04-22 00:04:43 +02:00 # @LastEditors: Dorad, ddxi@qq.com # @LastEditTime: 2023-04-22 00:18:13 +02:00 # @FilePath: \compress.sh # @Description: #
#
# 输入文件夹路径和输出文件夹路径
# 获取输入参数 if [ $# -lt 2 ]; then echo "Usage: $0 input_dir output_dir <quality%>" exit 1 fi
if [ ! -d "$1" ]; then echo "Input dir $1 not exists" exit 1 fi
input_dir=$1 output_dir=$2 # 压缩后的图片质量百分比, 默认为 80 if [ -z "$3" ]; then quality=80 else quality=$3 fi
# 检查convert命令是否存在 if ! command -v convert &>/dev/null; then echo "convert command not found, please install ImageMagick first" exit 1 fi
# 遍历输入文件夹下所有图片文件 find $input_dir -type f -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' | while read file; do # 创建输出文件夹的相同目录结构 relative_path=${file#"$input_dir"} output_file="$output_dir/$relative_path" echo "Output file: $output_file" # 创建输出文件夹 mkdir -p "${output_file%/*}" # 压缩图片并输出到相应的文件夹下 convert "$file" -quality $quality "$output_file" echo "Compress $file, output to $output_dir/$file" done
echo "Total files: $(find $input_dir -type f -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' | wc -l)" echo "Compressed files: $(find $output_dir -type f -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' | wc -l)" echo "Done!"
|
参考