svg.go 604 B

12345678910111213141516171819202122232425262728293031323334
  1. package imagetype_new
  2. import (
  3. "strings"
  4. "github.com/imgproxy/imgproxy/v3/bufreader"
  5. "github.com/tdewolff/parse/v2"
  6. "github.com/tdewolff/parse/v2/xml"
  7. )
  8. func init() {
  9. // Register SVG detector (needs at least 1000 bytes to reliably detect SVG)
  10. RegisterDetector(IsSVG)
  11. }
  12. func IsSVG(r bufreader.ReadPeeker) (Type, error) {
  13. l := xml.NewLexer(parse.NewInput(r))
  14. for {
  15. tt, _ := l.Next()
  16. switch tt {
  17. case xml.ErrorToken:
  18. return Unknown, nil
  19. case xml.StartTagToken:
  20. tag := strings.ToLower(string(l.Text()))
  21. if tag == "svg" || tag == "svg:svg" {
  22. return SVG, nil
  23. }
  24. }
  25. }
  26. }