90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
package webp
|
|
|
|
import (
|
|
"image"
|
|
"os"
|
|
|
|
"github.com/chai2010/webp"
|
|
"github.com/disintegration/imaging"
|
|
)
|
|
|
|
// EncodeFile encodes the specified image file to WebP format with the given width and height.
|
|
// The output file name is constructed by adding the .webp extension to the input file name.
|
|
func EncodeFile(filename string, width, height int) error {
|
|
// Open the input file
|
|
file, err := os.Open(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
// Decode the input file into an image.Image
|
|
img, format, err := image.Decode(file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Convert the image to RGBA format if it's not already in that format
|
|
if _, ok := img.(*image.RGBA); !ok {
|
|
img = imaging.Clone(img)
|
|
}
|
|
|
|
// Resize the image to the specified dimensions
|
|
resizedImg := imaging.Resize(img, width, height, imaging.Lanczos)
|
|
|
|
// Create a new file for writing the output
|
|
outFilename := filename[:len(filename)-len(format)] + "webp"
|
|
outFile, err := os.Create(outFilename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer outFile.Close()
|
|
|
|
// Encode the resized image to WebP format and write it to the output file
|
|
err = webp.Encode(outFile, resizedImg, &webp.Options{Quality: 80})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
//// Encode encodes the specified image to WebP format with the given width and height.
|
|
//// The output data is returned as a byte slice.
|
|
//func Encode(data []byte, width, height int) ([]byte, error) {
|
|
// // Decode the input data into an image.Image
|
|
// img, format, err := image.Decode(ioutil.NopCloser(bytes.NewReader(data)))
|
|
// if err != nil {
|
|
// return nil, err
|
|
// }
|
|
//
|
|
// // Convert the image to RGBA format if it's not already in that format
|
|
// if _, ok := img.(*image.RGBA); !ok {
|
|
// img = imaging.Clone(img)
|
|
// }
|
|
//
|
|
// // Resize the image to the specified dimensions
|
|
// resizedImg := imaging.Resize(img, width, height, imaging.Lanczos)
|
|
//
|
|
// // Encode the resized image to WebP format and return it as a byte slice
|
|
// var buf bytes.Buffer
|
|
// err = webp.Encode(&buf, resizedImg, &webp.Options{Quality: 80})
|
|
// if err != nil {
|
|
// return nil, err
|
|
// }
|
|
//
|
|
// return buf.Bytes(), nil
|
|
//}
|
|
//
|
|
//// Decode decodes the specified WebP data into an image.Image.
|
|
//func Decode(data []byte) (image.Image, error) {
|
|
// return webp.Decode(bytes.NewReader(data))
|
|
//}
|
|
//
|
|
//// IsWebP returns true if the specified data is a WebP image.
|
|
//func IsWebP(data []byte) bool {
|
|
// return webp.IsWebP(data)
|
|
//}
|
|
//
|
|
//// IsPNG returns true if the specified
|