golang 实现图片(gif/jpeg/png)转webp

本文介绍了如何使用Go语言创建一个图像转换工具类,将JPEG、PNG或GIF图片转换为WebP格式,并处理可能出现的Cgo编译器(gcc)缺失问题。示例代码展示了ImageBytes2WebpBytes和Image2Webp函数的用法以及控制台输出的日志和编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建转换工具类

util/webpUtil.go
package util

import (
	"bytes"
	"github.com/chai2010/webp"
	"image"
	_ "image/gif"
	_ "image/jpeg"
	_ "image/png"
	"io/ioutil"
	"log"
)

// ImageBytes2WebpBytes 将图片转为webp
// inputFile 图片字节切片(仅限gif,jpeg,png格式)
// outputFile webp图片字节切片
// 图片质量
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)

	//转为webp
	webpBytes, err := webp.EncodeRGBA(img, quality)

	if err != nil {
		log.Println("解析图片失败", err)
		return nil, err
	}

	return webpBytes, nil
}

// Image2Webp 将图片转为webp
// inputFile 图片路径(仅限gif,jpeg,png格式)
// outputFile 图片输出路径
// 图片质量
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文件

main.go
package main

import (
	"os"
	"webpTools/util"
)

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("转换完成")
	}

}

控制台输出日志

2023/08/25 17:31:26 原始图片格式: jpeg
2023/08/25 17:31:27 原始大小:500 k,转换后大小:69 k,压缩比:13 % 
2023/08/25 17:31:27 转换完成

出现报错

cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %

按照说明配置gcc: qcBlog go报错 cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值