美文网首页📙Go语言:进阶大全
Go语言:识别全格式图片并执行相应的编码保存(支持webp)

Go语言:识别全格式图片并执行相应的编码保存(支持webp)

作者: 白祤星 | 来源:发表于2019-10-20 11:01 被阅读0次

前置安装:


go get github.com/chai2010/webp

代码实例:


package main

import (
    "bytes"
    "image"
    "image/gif"
    "image/jpeg"
    "image/png"
    "io/ioutil"
    "os"

    "github.com/chai2010/webp"
    "golang.org/x/image/bmp"
)

func main() {
    // 图片路径
    file_name := `./test.webp`

    // 读取图片
    old_file, err := os.Open(file_name)
    if err != nil {
        panic(err)
    }

    // 识别图片类型
    file, image_type, _ := image.Decode(old_file)

    // 获取图片的类型
    switch image_type {
    case `jpeg`:
        println(`这是 jpg 文件`)
        new_file, _ := os.Create(`./_test.jpg`)
        jpeg.Encode(new_file, file, nil)
        new_file.Close()
    case `png`:
        println(`这是 png 文件`)
        new_file, _ := os.Create(`./_test.png`)
        png.Encode(new_file, file)
        new_file.Close()
    case `gif`:
        println(`这是 gif 文件`)
        new_file, _ := os.Create(`./_test.gif`)
        gif.Encode(new_file, file, nil)
        new_file.Close()
    case `bmp`:
        println(`这是 bmp 文件`)
        new_file, _ := os.Create(`./_test.bmp`)
        bmp.Encode(new_file, file)
        new_file.Close()
    default:
        data, _ := ioutil.ReadFile(file_name)
        // 尝试以 webp 进行解码
        m, err := webp.Decode(bytes.NewReader(data))
        if err == nil {
            println(`这是 webp 文件`)
            var buf bytes.Buffer
            webp.Encode(&buf, m, nil)
            ioutil.WriteFile(`./_test.webp`, buf.Bytes(), 0666)
        } else {
            println(`不是 图片文件!`)
        }
    }
    old_file.Close()
}

相关文章

网友评论

    本文标题:Go语言:识别全格式图片并执行相应的编码保存(支持webp)

    本文链接:https://www.haomeiwen.com/subject/gfiomctx.html