目录:

  前序

  效果图

  简介

  全部代码

 

前序:

  接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 exe 程序,可以在 Window 下运行。也可以放到 Linux 环境下编译运行,golang 是一种静态、跨平台的语言。

 

效果图

  Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩  -Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

  Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

压缩前Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩 压缩后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 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩