
go如何将其它类型图片转成webp格式图片
作者: boyyang
分类: 后端开发
发布: 2024-12-19 03:49:08
更新: 2025-03-23 12:41:09
浏览: 160
什么是webp?
WebP 是一种由 Google 开发的图像文件格式,旨在提供比传统格式(如 JPEG 和 PNG)更高的压缩率,同时保持图像质量。WebP 格式支持有损和无损压缩,并且支持透明度(Alpha 通道)和动画。
以下是 WebP 的一些主要特点:
- 高压缩率:WebP 格式通常比 JPEG 和 PNG 格式提供更高的压缩率,这意味着在相同的图像质量下,WebP 文件的大小更小,从而加快网页加载速度。
- 无损压缩:WebP 支持无损压缩,这意味着压缩过程不会损失图像质量,适合需要高质量图像的场景。
- 透明度支持:WebP 格式支持透明度,使得图像可以具有透明背景,这对于创建复杂的图形和设计非常有用。
- 动画支持:WebP 格式还支持动画,这意味着可以创建包含多个帧的动态图像,类似于 GIF 格式。
- 兼容性:虽然 WebP 格式在性能和压缩率方面具有优势,但并非所有浏览器都原生支持 WebP 格式。为了确保兼容性,通常需要使用 JavaScript 库(如 Google 的 libwebp)或服务器端转换工具将 WebP 格式转换为其他格式。
WebP 格式已经成为许多网站和应用程序中用于图像优化的首选格式,因为它能够提供更好的性能和更小的文件大小。
安装第三方库
go get github.com/chai2010/webp
使用
- 通过image.Decode将读取到的[]byte类型的数据转成Image类型
- 将image传递给弟三方库进行处理
- quality代表图片转换后的质量数值越高代表图片质量越好,相应最终图片大小也会相对更大
package main
import (
"bytes"
"fmt"
"github.com/chai2010/webp"
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"os"
"path"
"strings"
)
func main() {
err := imageToWebp("images/girl.jpg", 10)
if err != nil {
fmt.Println(err)
}
}
func imageToWebp(fileName string, quality float32) error {
file, err := os.ReadFile(fileName)
if err != nil {
return err
}
img, _, err := image.Decode(bytes.NewBuffer(file))
if err != nil {
return err
}
webpBytes, err := webp.EncodeRGBA(img, quality)
if err != nil {
return err
}
err = os.WriteFile(fmt.Sprintf("%s.webp", fileNameWithoutExt(fileName)), webpBytes, 0644)
if err != nil {
return err
}
return nil
}
func fileNameWithoutExt(fileName string) string {
return strings.TrimSuffix(path.Base(fileName), path.Ext(fileName))
}
结果
质量 | 压缩前(M) | 压缩后 |
---|---|---|
10 | 6.5 | 153kb |
50 | 6.5 | 250kb |
100 | 6.5 | 2.2M |