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

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

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

推荐文章

在 Docker 中部署 Vue 开发环境
2024-11-18 15:04:41 +0800 CST
H5抖音商城小黄车购物系统
2024-11-19 08:04:29 +0800 CST
curl错误代码表
2024-11-17 09:34:46 +0800 CST
Flet 构建跨平台应用的 Python 框架
2025-03-21 08:40:53 +0800 CST
Vue3中如何进行性能优化?
2024-11-17 22:52:59 +0800 CST
回到上次阅读位置技术实践
2025-04-19 09:47:31 +0800 CST
网络数据抓取神器 Pipet
2024-11-19 05:43:20 +0800 CST
git使用笔记
2024-11-18 18:17:44 +0800 CST
php腾讯云发送短信
2024-11-18 13:50:11 +0800 CST
Shell 里给变量赋值为多行文本
2024-11-18 20:25:45 +0800 CST
Dropzone.js实现文件拖放上传功能
2024-11-18 18:28:02 +0800 CST
JavaScript设计模式:观察者模式
2024-11-19 05:37:50 +0800 CST
JavaScript设计模式:组合模式
2024-11-18 11:14:46 +0800 CST
Claude:审美炸裂的网页生成工具
2024-11-19 09:38:41 +0800 CST
php 统一接受回调的方案
2024-11-19 03:21:07 +0800 CST
File 和 Blob 的区别
2024-11-18 23:11:46 +0800 CST
Linux 常用进程命令介绍
2024-11-19 05:06:44 +0800 CST
jQuery `$.extend()` 用法总结
2024-11-19 02:12:45 +0800 CST
js一键生成随机颜色:randomColor
2024-11-18 10:13:44 +0800 CST
手机导航效果
2024-11-19 07:53:16 +0800 CST
Nginx 反向代理
2024-11-19 08:02:10 +0800 CST
php常用的正则表达式
2024-11-19 03:48:35 +0800 CST
纯CSS绘制iPhoneX的外观
2024-11-19 06:39:43 +0800 CST
Vue 3 中的 Fragments 是什么?
2024-11-17 17:05:46 +0800 CST
程序员茄子在线接单