chai2010 / webp

WebP decoder and encoder for Go (Zero Dependencies).
http://godoc.org/github.com/chai2010/webp
BSD 3-Clause "New" or "Revised" License
512 stars 89 forks source link

对比cwebp命令行,带透明度png图片转换失真明显 #27

Open yourchanges opened 4 years ago

yourchanges commented 4 years ago

使用下面代码进行png转webp

func ImgTowebp(imgData []byte) ([]byte, error) {
    //jpeg.Decode()
    img, err := jpeg.Decode(bytes.NewBuffer(imgData))
    if err != nil {
        //log.Println("decode error from jpg",err)
        img, err = png.Decode(bytes.NewBuffer(imgData))
        if err != nil {
            log.Println("decode error from png or jpg", err)
            return nil, err
        }
    }
    //log.Println(fname)
    webImgBytes, err := webp.EncodeRGBA(img, 80)
    if err == nil {
        webpLength := len(webImgBytes)
        imgLength := len(imgData)
        if webpLength > imgLength {
            log.Println("webp bigger than img")
        }
        log.Println("img2webp <webp size>:<img size>", webpLength, ":", imgLength)
        return webImgBytes, nil
    } else {
        log.Println("webp encode jpg file", err)
        return nil, err
    }

}

对比用cwebp命令行

cwebp -q 80 test.png -o test.png.webp

发现图片的颜色变化明显,排查源代码没有发现明显错误

测试图片:

test