package core import ( "bytes" "fmt" "image" "image/jpeg" "image/png" "strings" "golang.org/x/image/tiff" ) // EncodeImage encodes img into buf using the given format name and returns // the MIME type for use in data URIs. func EncodeImage(buf *bytes.Buffer, img image.Image, format string, quality int) (mimeType string, err error) { switch strings.ToLower(format) { case "jpg", "jpeg": err = jpeg.Encode(buf, img, &jpeg.Options{Quality: quality}) mimeType = "image/jpeg" case "png": err = png.Encode(buf, img) mimeType = "image/png" case "tif", "tiff": err = tiff.Encode(buf, img, &tiff.Options{Compression: tiff.Deflate, Predictor: true}) mimeType = "image/tiff" case "webp", "bmp": err = fmt.Errorf("format %s is read-only — use jpg, png or tif for output", format) default: err = fmt.Errorf("unknown output format: %s", format) } return } // ExtToFormat normalises a file extension string to a canonical format name. func ExtToFormat(ext string) string { switch strings.ToLower(ext) { case "jpeg": return "jpg" case "tiff": return "tif" default: return strings.ToLower(ext) } } // GetResampleFilter returns the imaging.ResampleFilter for the given name. // Falls back to Lanczos for unknown names. func GetResampleFilter(name string) ResampleFilter { switch strings.ToLower(name) { case "cubic": return ResampleCubic case "linear": return ResampleLinear case "box": return ResampleBox default: return ResampleLanczos } }