代码 一键压缩图片代码

2024-11-19 00:41:25 +0800 CST views 792

#一键压缩图片代码
compress_images.sh 脚本,该脚本在没有提供路径参数时,会默认使用当前工作目录 (pwd) 作为目标目录。这样,无需手动传递目录参数,脚本会自动处理当前目录下的图片。

#!/bin/bash

# 你的 TinyPNG API 密钥
API_KEY="YOUR_API_KEY_HERE"

# 如果没有提供目录参数,则使用当前工作目录
TARGET_DIR="${1:-$(pwd)}"

# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
    echo "指定的目录不存在:$TARGET_DIR"
    exit 1
fi

# 查找并压缩图片
find "$TARGET_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" \) | while read -r img; do
    ext="${img##*.}"
    
    if [[ "$ext" == "gif" ]]; then
        echo "跳过 GIF 文件: $img"
        continue
    fi
    
    echo "正在压缩: $img"
    
    # 调用 TinyPNG API 进行压缩
    compressed=$(curl -s --user api:$API_KEY --data-binary @"$img" https://api.tinify.com/shrink | grep -o '"url":"[^"]*' | sed 's/"url":"//')

    if [ -n "$compressed" ]; then
        # 如果压缩成功,则下载压缩后的文件并覆盖原文件
        curl -s -o "${img}.tmp" "$compressed"
        
        # 检查下载是否成功
        if [ $? -eq 0 ]; then
            mv "${img}.tmp" "$img"
            echo "压缩并覆盖完成: $img"
        else
            echo "下载压缩后的图片失败,未覆盖: $img"
            rm -f "${img}.tmp"
        fi
    else
        echo "压缩失败: $img"
    fi
done

echo "所有图片处理完成。"

脚本逻辑:

  • TARGET_DIR="${1:-$(pwd)}":这一行代码的意思是,如果没有提供参数 $1,则使用当前工作目录 $(pwd) 作为目标目录。
  • find "$TARGET_DIR":使用目标目录作为 find 命令的起始点。

使用方式:

  • 直接运行脚本:在任何目录下运行脚本,脚本会自动处理当前目录下的图片:
    /root/compress_images.sh
    
  • 手动指定目录:如果需要处理其他目录,也可以手动传递目录参数:
    /root/compress_images.sh /path/to/directory
    

通过这种方式,脚本会更灵活,无论你是在当前目录下运行,还是指定特定目录,都会正确处理图片。

images

复制全文 生成海报 图片处理 脚本编程 API调用

推荐文章

如何实现虚拟滚动
2024-11-18 20:50:47 +0800 CST
Vue3的虚拟DOM是如何提高性能的?
2024-11-18 22:12:20 +0800 CST
联系我们
2024-11-19 02:17:12 +0800 CST
Vue3中如何处理状态管理?
2024-11-17 07:13:45 +0800 CST
`Blob` 与 `File` 的关系
2025-05-11 23:45:58 +0800 CST
MySQL 日志详解
2024-11-19 02:17:30 +0800 CST
Vue3中如何实现国际化(i18n)?
2024-11-19 06:35:21 +0800 CST
nginx反向代理
2024-11-18 20:44:14 +0800 CST
Golang - 使用 GoFakeIt 生成 Mock 数据
2024-11-18 15:51:22 +0800 CST
避免 Go 语言中的接口污染
2024-11-19 05:20:53 +0800 CST
Rust开发笔记 | Rust的交互式Shell
2024-11-18 19:55:44 +0800 CST
Golang在整洁架构中优雅使用事务
2024-11-18 19:26:04 +0800 CST
JavaScript中的常用浏览器API
2024-11-18 23:23:16 +0800 CST
MySQL死锁 - 更新插入导致死锁
2024-11-19 05:53:50 +0800 CST
微信内弹出提示外部浏览器打开
2024-11-18 19:26:44 +0800 CST
LangChain快速上手
2025-03-09 22:30:10 +0800 CST
gin整合go-assets进行打包模版文件
2024-11-18 09:48:51 +0800 CST
Go 并发利器 WaitGroup
2024-11-19 02:51:18 +0800 CST
使用Python提取图片中的GPS信息
2024-11-18 13:46:22 +0800 CST
15 个 JavaScript 性能优化技巧
2024-11-19 07:52:10 +0800 CST
CSS 实现金额数字滚动效果
2024-11-19 09:17:15 +0800 CST
JavaScript 上传文件的几种方式
2024-11-18 21:11:59 +0800 CST
程序员茄子在线接单