前言
Tinify是一個提供圖片compress、resize 服務的網(wǎng)站腹备,在肉眼看不失真的基礎上能夠極大的壓縮圖片文件大小植酥,具體介紹可以看他們的官網(wǎng) https://tinify.com。
Tinify官方提供了很多語言的SDK友驮,但是并沒有Golang的卸留。前幾天寫了一篇文章 《Golang + Tinypng實現(xiàn)圖片壓縮》,里面談到了Golang使用Tinify官方提供的 HTTP API client 實現(xiàn)compress的一些想法旨指,但是畢竟簡單喳整,所以工作之余在官方 HTTP API client的基礎上模仿官方其他語言的實現(xiàn),使用Golang實現(xiàn)了一個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")
}
注意
和官網(wǎng)一樣熬尺,修改圖片尺寸時支持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淹接,或直接在文章后留言,筆者會盡快修復烁试,謝謝拢肆。