37 lines
784 B
Go
37 lines
784 B
Go
package wepb
|
|
|
|
import (
|
|
"context"
|
|
"image/jpeg"
|
|
"image/png"
|
|
"io"
|
|
|
|
"github.com/yazmeyaa/telegram_sticker_converter/internal/converter"
|
|
"golang.org/x/image/webp"
|
|
)
|
|
|
|
type webpConverterService struct{}
|
|
|
|
// Transform implements converter.WebpConverterService.
|
|
func (w webpConverterService) Transform(ctx context.Context, in io.Reader, out io.Writer, opts converter.WebpTransformOptions) error {
|
|
i, err := webp.Decode(in)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if opts.Format == converter.FormatPNG {
|
|
return png.Encode(out, i)
|
|
}
|
|
if opts.Format == converter.FormatJPEG {
|
|
return jpeg.Encode(out, i, nil)
|
|
}
|
|
|
|
return converter.ErrUnknownFormat
|
|
}
|
|
|
|
var _ converter.WebpConverterService = webpConverterService{}
|
|
|
|
func NewService() *webpConverterService {
|
|
return &webpConverterService{}
|
|
}
|