Ai
1 Star 1 Fork 1

up-zero/gotool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
image.go 1.30 KB
一键复制 编辑 原始数据 按行查看 历史
GetcharZp 提交于 2025-01-14 19:31 +08:00 . :bug:使用目标文件类型进行压缩
package gotool
import (
"fmt"
"image"
"image/jpeg"
"image/png"
"os"
"path/filepath"
)
// ImageCompression 图片压缩
//
// dstFile 目标图片路径
// srcFile 源图片路径
// quality 压缩质量,范围 1-100(值越低,压缩率越高,质量越低),对于 PNG 图片,映射到 0-9 的压缩级别(0:无压缩,9:最大压缩)
func ImageCompression(dstFile, srcFile string, quality int) error {
file, err := os.Open(srcFile)
if err != nil {
return err
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
return err
}
if err = os.MkdirAll(filepath.Dir(dstFile), os.ModePerm); err != nil {
return err
}
outFile, err := os.Create(dstFile)
if err != nil {
return err
}
defer outFile.Close()
compressionLevel := int((100 - quality) / 10) // 从质量 100 映射到 0(无压缩),质量 0 映射到 9(最大压缩)
imgType := filepath.Ext(dstFile)
switch imgType {
case ".jpeg", ".jpg":
err = jpeg.Encode(outFile, img, &jpeg.Options{Quality: quality})
if err != nil {
return err
}
case ".png":
encoder := png.Encoder{CompressionLevel: png.CompressionLevel(compressionLevel)}
err = encoder.Encode(outFile, img)
if err != nil {
return err
}
default:
return fmt.Errorf("unsupported image format: %s", imgType)
}
return nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/up-zero/gotool.git
git@gitee.com:up-zero/gotool.git
up-zero
gotool
gotool
main

搜索帮助