Go 实现图片(GIF/JPEG/PNG)转换为 WebP 格式
功能概述
该工具用于将图片从 GIF、JPEG、PNG 格式转换为 WebP 格式,并支持指定图片质量。主要包含两个功能函数:
ImageBytes2WebpBytes
:将图片字节切片转换为 WebP 字节切片。Image2Webp
:将指定路径的图片文件转换为 WebP 格式,并保存到指定路径。
代码详解
util/webpUtil.go
package util
import (
"bytes"
"github.com/chai2010/webp"
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"io/ioutil"
"log"
)
// ImageBytes2WebpBytes 将图片字节切片转换为 WebP 格式
// 参数:
// - input:输入图片的字节切片(支持 GIF、JPEG、PNG 格式)
// - quality:转换后的图片质量(0-100)
// 返回:
// - webpBytes:转换后的 WebP 图片字节切片
// - err:错误信息
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)
webpBytes, err := webp.EncodeRGBA(img, quality)
if err != nil {
log.Println("解析图片失败", err)
return nil, err
}
return webpBytes, nil
}
// Image2Webp 将指定路径的图片转换为 WebP 格式
// 参数:
// - inputFile:输入图片文件路径
// - outputFile:输出 WebP 文件路径
// - quality:转换后的图片质量(0-100)
// 返回:错误信息
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.go
package main
import (
"os"
"webpTools/util"
"log"
)
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("转换完成")
}
}
使用方法
在
main.go
中,设置输入图片文件路径input
和输出 WebP 文件路径output
,以及图片质量quality
。调用
util.Image2Webp
函数,将图片转换为 WebP 格式并保存。运行程序:
go run main.go
输出示例
转换完成后,控制台会输出原始图片格式、大小和压缩比:
2023/08/25 17:31:26 原始图片格式: jpeg
2023/08/25 17:31:27 原始大小:500 k,转换后大小:69 k,压缩比:13 %
2023/08/25 17:31:27 转换完成
总结
通过该工具,可以轻松将 GIF、JPEG、PNG 格式的图片转换为 WebP 格式,有助于减少文件大小并提高加载速度。工具简单易用,适合集成到各种 Go 项目中。