| package imageutil | |
| import ( | |
| "errors" | |
| "image" | |
| "image/jpeg" | |
| "io" | |
| "github.com/docker/go-units" | |
| "github.com/gen2brain/jpegli" | |
| "github.com/metatube-community/metatube-sdk-go/common/bufferpool" | |
| ) | |
| var _pool = bufferpool.New(256 * units.KiB) | |
| func Decode(r io.Reader) (image.Image, string, error) { | |
| buf := _pool.Get() | |
| defer _pool.Put(buf) | |
| var jpegErr jpeg.UnsupportedError | |
| m, f, err := image.Decode(io.TeeReader(r, buf)) | |
| if err != nil && errors.As(err, &jpegErr) { | |
| // Fallback to decode with jpegli. | |
| m, err = jpegli.Decode(io.MultiReader(buf, r)) | |
| } | |
| return m, f, err | |
| } | |