美文网首页📙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