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

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

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

推荐文章

Vue 3 是如何实现更好的性能的?
2024-11-19 09:06:25 +0800 CST
介绍Vue3的Tree Shaking是什么?
2024-11-18 20:37:41 +0800 CST
网站日志分析脚本
2024-11-19 03:48:35 +0800 CST
25个实用的JavaScript单行代码片段
2024-11-18 04:59:49 +0800 CST
Dropzone.js实现文件拖放上传功能
2024-11-18 18:28:02 +0800 CST
使用 Go Embed
2024-11-19 02:54:20 +0800 CST
MySQL数据库的36条军规
2024-11-18 16:46:25 +0800 CST
JavaScript 策略模式
2024-11-19 07:34:29 +0800 CST
随机分数html
2025-01-25 10:56:34 +0800 CST
Vue3中的自定义指令有哪些变化?
2024-11-18 07:48:06 +0800 CST
底部导航栏
2024-11-19 01:12:32 +0800 CST
PHP 的生成器,用过的都说好!
2024-11-18 04:43:02 +0800 CST
2024年微信小程序开发价格概览
2024-11-19 06:40:52 +0800 CST
curl错误代码表
2024-11-17 09:34:46 +0800 CST
软件定制开发流程
2024-11-19 05:52:28 +0800 CST
PHP服务器直传阿里云OSS
2024-11-18 19:04:44 +0800 CST
Web浏览器的定时器问题思考
2024-11-18 22:19:55 +0800 CST
Nginx 负载均衡
2024-11-19 10:03:14 +0800 CST
Golang 随机公平库 satmihir/fair
2024-11-19 03:28:37 +0800 CST
程序员茄子在线接单