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

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

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

推荐文章

filecmp,一个Python中非常有用的库
2024-11-19 03:23:11 +0800 CST
FastAPI 入门指南
2024-11-19 08:51:54 +0800 CST
PHP 唯一卡号生成
2024-11-18 21:24:12 +0800 CST
一些实用的前端开发工具网站
2024-11-18 14:30:55 +0800 CST
Node.js中接入微信支付
2024-11-19 06:28:31 +0800 CST
git使用笔记
2024-11-18 18:17:44 +0800 CST
避免 Go 语言中的接口污染
2024-11-19 05:20:53 +0800 CST
SQL常用优化的技巧
2024-11-18 15:56:06 +0800 CST
ElasticSearch简介与安装指南
2024-11-19 02:17:38 +0800 CST
Vue3中的v-bind指令有什么新特性?
2024-11-18 14:58:47 +0800 CST
前端代码规范 - 图片相关
2024-11-19 08:34:48 +0800 CST
Go 如何做好缓存
2024-11-18 13:33:37 +0800 CST
Vue3的虚拟DOM是如何提高性能的?
2024-11-18 22:12:20 +0800 CST
使用 sync.Pool 优化 Go 程序性能
2024-11-19 05:56:51 +0800 CST
Plyr.js 播放器介绍
2024-11-18 12:39:35 +0800 CST
Vue3中怎样处理组件引用?
2024-11-18 23:17:15 +0800 CST
JS中 `sleep` 方法的实现
2024-11-19 08:10:32 +0800 CST
程序员茄子在线接单