新建转换工具类
util/webpUtil.go
package util
import (
"bytes"
"github.com/chai2010/webp"
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"io/ioutil"
"log"
)
// ImageBytes2WebpBytes 将图片转为webp
// inputFile 图片字节切片(仅限gif,jpeg,png格式)
// outputFile webp图片字节切片
// 图片质量
func ImageBytes2WebpBytes(input []byte, quality float32) ([]byte, error) {
//解析图片
img, format, err := image.Decode(bytes.NewBuffer(input))
if err != nil {
log.Println("图片解析失败")
return nil, err
}
log.Println("原始图片格式:", format)
//转为webp
webpBytes, err := webp.EncodeRGBA(img, quality)
if err != nil {
log.Println("解析图片失败", err)
return nil, err
}
return webpBytes, nil
}
// Image2Webp 将图片转为webp
// inputFile 图片路径(仅限gif,jpeg,png格式)
// outputFile 图片输出路径
// 图片质量
func Image2Webp(inputFile string, outputFile string, quality float32) error {
// 读取文件
fileBytes, err := ioutil.ReadFile(inputFile)
if err != nil {
log.Println("读取文件失败:", err)
return err
}
webpBytes, err := ImageBytes2WebpBytes(fileBytes, quality)
if err != nil {
log.Println("解析图片失败", err)
return err
}
if err = ioutil.WriteFile(outputFile, webpBytes, 0666); err != nil {
log.Println("图片写入失败", err)
return err
}
originalSize := len(fileBytes)
webpSize := len(webpBytes)
log.Printf("原始大小:%d k,转换后大小:%d k,压缩比:%d %% \n", originalSize/1024, webpSize/1024, webpSize*100/originalSize)
return nil
}
新建main文件
main.go
package main
import (
"os"
"webpTools/util"
)
func main() {
input := ".\\input\\aa.jpg"
output := ".\\input\\aaaa.webp"
quality := 50
err := util.Image2Webp(input, output, float32(quality))
if err != nil {
log.Print("图片转换失败:", err.Error())
os.Exit(1)
} else {
log.Print("转换完成")
}
}
控制台输出日志
2023/08/25 17:31:26 原始图片格式: jpeg
2023/08/25 17:31:27 原始大小:500 k,转换后大小:69 k,压缩比:13 %
2023/08/25 17:31:27 转换完成
出现报错
cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %
按照说明配置gcc: https://blog.qcoder.cn/blogDetail/76