Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:41
目录:
前序
效果图
简介
全部代码
前序:
接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 exe 程序,可以在 Window 下运行。也可以放到 Linux 环境下编译运行,golang 是一种静态、跨平台的语言。
效果图
-

压缩前
压缩后
开始main:
showTips 做了一些有好提示的文字输出,execute 是核心,压缩函数的调用也在里面
提示函数
我分离了两种压缩形式,批量和单张,再组合质量和尺寸,压缩100张600K的图片到8~9K,200px宽度,仅用了6秒左右,win 10,12G,i5,ssd。
还可以做完全的,宽和高像素尺寸的限制,只需要改变几个参数,大家先来看看程序运行的时候显示给用户的提示信息:
对于批量压缩,自动遍历用户输入的文件夹里面的所有符合格式的文件,并进行压缩。
压缩结构体:
这个比较简单,其余添加可以自定义
图片格式验证
自定义支持的文件格式,主要是图片的格式,同时拆分返回一些关键的信息,例如尾缀
文件夹遍历
主要用于批量压缩,做了所输入的目录的图片文件遍历,和要保存到的文件夹的创建,和采用纳秒级做压缩后的图片的名称。
压缩前处理函数:
主要做了压缩结构体数据的配置,和验证用户路径的输入以及最终压缩输出文件目录的路径组合。这里有个坑点,对于控制台的数据获取,最好使用 bufio.NewReader(os.Stdin) 而不是 fmt.Scanf 否则,在fmt.p... 输出错误提示信息的时候也会被当作输入读取了,而不是用户输入的。
压缩函数(核心):
基于golang 1.7 自带的 image/jpeg 库。所谓的宽高完全自定义的修改,就在这里,我是采用了等比例缩放,所以只需要传入其中一项。里面分两次读写同一个文件是因为一次用于尺寸读取,而且两次是不能共用的,会出错。
全部代码
- 上一篇: golang 十六进制加法
- 下一篇: golang time.Time 转时间戳
相关文章
-
golang 十六进制加法
golang 十六进制加法
- 互联网
- 2026年04月04日
-
golang常用库包:http和API客户端请求库
golang常用库包:http和API客户端请求库
- 互联网
- 2026年04月04日
-
golang能不能return任意数据类型
golang能不能return任意数据类型
- 互联网
- 2026年04月04日
-
golang time.Time 转时间戳
golang time.Time 转时间戳
- 互联网
- 2026年04月04日
-
golang race检查
golang race检查
- 互联网
- 2026年04月04日
-
golang map 参数传递
golang map 参数传递
- 互联网
- 2026年04月04日








