代码 Go 实现图片(GIF/JPEG/PNG)转换为 WebP 格式

2024-11-19 04:17:05 +0800 CST views 1287

Go 实现图片(GIF/JPEG/PNG)转换为 WebP 格式

功能概述

该工具用于将图片从 GIF、JPEG、PNG 格式转换为 WebP 格式,并支持指定图片质量。主要包含两个功能函数:

  1. ImageBytes2WebpBytes:将图片字节切片转换为 WebP 字节切片。
  2. 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("转换完成")
	}
}

使用方法

  1. main.go 中,设置输入图片文件路径 input 和输出 WebP 文件路径 output,以及图片质量 quality

  2. 调用 util.Image2Webp 函数,将图片转换为 WebP 格式并保存。

  3. 运行程序:

    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 项目中。

推荐文章

api接口怎么对接
2024-11-19 09:42:47 +0800 CST
如何使用go-redis库与Redis数据库
2024-11-17 04:52:02 +0800 CST
HTML和CSS创建的弹性菜单
2024-11-19 10:09:04 +0800 CST
你可能不知道的 18 个前端技巧
2025-06-12 13:15:26 +0800 CST
rangeSlider进度条滑块
2024-11-19 06:49:50 +0800 CST
Go语言中的mysql数据库操作指南
2024-11-19 03:00:22 +0800 CST
mysql 优化指南
2024-11-18 21:01:24 +0800 CST
记录一次服务器的优化对比
2024-11-19 09:18:23 +0800 CST
Python Invoke:强大的自动化任务库
2024-11-18 14:05:40 +0800 CST
避免 Go 语言中的接口污染
2024-11-19 05:20:53 +0800 CST
php客服服务管理系统
2024-11-19 06:48:35 +0800 CST
防止 macOS 生成 .DS_Store 文件
2024-11-19 07:39:27 +0800 CST
liunx宝塔php7.3安装mongodb扩展
2024-11-17 11:56:14 +0800 CST
Python 获取网络时间和本地时间
2024-11-18 21:53:35 +0800 CST
JavaScript 的模板字符串
2024-11-18 22:44:09 +0800 CST
程序员茄子在线接单