前言
Tinify是一个提供图片compress、resize 服务的网站,在肉眼看不失真的基础上能够极大的压缩图片文件大小,具体介绍可以看他们的官网 https://tinify.com。
Tinify官方提供了很多语言的SDK,但是并没有Golang的。前几天写了一篇文章 Golang + Tinypng实现图片压缩,里面谈到了Golang使用Tinify官方提供的 HTTP API client 实现compress的一些想法,但是毕竟简单,所以工作之余在官方 HTTP API client的基础上模仿官方其他语言的实现,使用Golang实现了一个Golang版本的 Tinify API client——tinify-go。
Github
https://github.com/gwpp/tinify-go
支持的功能
- 图片压缩
- 修改图片尺寸
来源去向
- 图片来源
- 文件
- 二进制流
- URL
- 处理后的图片去向
- 文件
- 二进制流
获取方式
go get -u github.com/gwpp/tinify-go
一些示例
-
压缩图片
func TestCompressFromFile(t *testing.T) { Tinify.SetKey(Key) source, err := Tinify.FromFile("./test.jpg") if err != nil { t.Error(err) return } err = source.ToFile("./test_output/CompressFromFile.jpg") if err != nil { t.Error(err) return } t.Log("Compress successful") }
-
修改图片尺寸
func TestResizeFromBuffer(t *testing.T) { Tinify.SetKey(Key) buf, err := ioutil.ReadFile("./test.jpg") if err != nil { t.Error(err) return } source, err := Tinify.FromBuffer(buf) if err != nil { t.Error(err) return } err = source.Resize(&Tinify.ResizeOption{ Method: Tinify.ResizeMethodScale, Width: 200, }) if err != nil { t.Error(err) return } err = source.ToFile("./test_output/ResizesFromBuffer.jpg") if err != nil { t.Error(err) return } t.Log("Resize successful") }
-
注意
和官网一样,修改图片尺寸时支持scale
、fit
、cover
三种模式,在使用fit或cover时都需要同时设置width、height,但是使用scale的话,width、height必须设置一个,也只能设置一个,同时设置的话会出错。 -
其他
解锁更多姿势请参照测试代码 tinify_test.go
测试
go get -u github.com/gwpp/tinify-go
cd $GOPATH/src/github.com/gwpp/tinify-go
go test
写在最后
平时项目比较赶,只能抽点午休时间写写,比较仓促,加上笔者水平有限所以可能会有不少问题。若是遇到BUG请及时 GitHub issue,或直接在文章后留言,笔者会尽快修复,谢谢。
有疑问加站长微信联系(非本文作者)