2025-10-20 22:21:55 +03:00
|
|
|
package convert
|
|
|
|
|
|
2025-10-22 21:34:17 +03:00
|
|
|
import (
|
|
|
|
|
"github.com/davidbyttow/govips/v2/vips"
|
|
|
|
|
"io"
|
|
|
|
|
)
|
|
|
|
|
|
2025-10-20 22:21:55 +03:00
|
|
|
type service struct{}
|
|
|
|
|
|
|
|
|
|
func newService() *service {
|
|
|
|
|
return &service{}
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-22 21:34:17 +03:00
|
|
|
func (s *service) ConvertAndSave(imageData []byte, fullWriter, thumbWriter io.Writer) error {
|
|
|
|
|
img, err := vips.NewImageFromBuffer(imageData)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
defer img.Close()
|
|
|
|
|
|
|
|
|
|
//force convert even it is already a jpeg image
|
|
|
|
|
converted, _, err := img.ExportJpeg(&vips.JpegExportParams{
|
|
|
|
|
StripMetadata: true,
|
|
|
|
|
Quality: 90,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if _, err = fullWriter.Write(converted); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err = img.Thumbnail(300, 300, vips.InterestingNone); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
thumbnail, _, err := img.ExportJpeg(&vips.JpegExportParams{
|
|
|
|
|
StripMetadata: true,
|
|
|
|
|
Quality: 80,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if _, err = thumbWriter.Write(thumbnail); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2025-10-20 22:21:55 +03:00
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|