如何在GitHub仓库Issue上传时自动压缩user-attachments/assets图片大小?
GitHub Issue大图片自动压缩方案
可行方案概述
完全可以实现大图片自动压缩,且GitHub Action是最适合的触发方式,能在用户上传图片后自动完成压缩优化,提升帖子可用性。
一、自动压缩的核心实现思路
- 监听Issue或评论的创建/编辑事件,识别其中上传到
user-attachments/assets的图片文件 - 对超过体积阈值(比如1MB)的图片,用专业工具压缩到网页友好的尺寸(比如长边≤1920px),同时保留足够画质
- 压缩完成后,替换原图片附件或更新评论中的图片链接,确保显示的是优化后的版本
二、GitHub Action具体实现步骤
- 配置触发事件:在Action的YAML文件中设置监听Issue和评论的创建、编辑动作:
on: issues: types: [created, edited] issue_comment: types: [created, edited] - 获取图片附件:通过GitHub API拉取当前Issue/评论的附件列表,筛选出
.jpg、.png、.webp等格式的文件 - 安装压缩工具:在Action运行环境中安装
sharp(Node.js工具)或ImageMagick(命令行工具),比如:npm install sharp - 执行压缩逻辑:编写脚本处理图片,以
sharp为例:const sharp = require('sharp'); // 压缩图片至长边不超过1920px,质量80 await sharp('original.jpg') .resize({ width: 1920, withoutEnlargement: true }) .jpeg({ quality: 80 }) .toFile('compressed.jpg'); - 更新内容:将压缩后的图片上传回
user-attachments/assets,并调用API修改Issue/评论中的图片链接,替换为压缩后的文件路径 - 权限配置:在Action的权限设置中开启
issues: write和contents: write,确保有修改Issue和操作附件的权限
三、实用注意事项
- 防重复压缩:给压缩后的图片添加后缀(比如
-compressed),或者记录已处理的文件ID,避免重复触发压缩流程 - 画质与体积平衡:根据图片类型调整压缩参数,截图类图片可适当降低质量,摄影类图片保留更高画质
- 格式优化:优先将图片转换为WebP格式,相同画质下体积比JPG/PNG小30%-50%,进一步提升加载速度
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

