tiff.go 770 B

123456789101112131415161718192021222324252627282930313233
  1. package imagetype
  2. import (
  3. "github.com/imgproxy/imgproxy/v3/bufreader"
  4. )
  5. var (
  6. tiffLE = []byte("II*\x00")
  7. tiffBE = []byte("MM\x00*")
  8. )
  9. func init() {
  10. // Register TIFF detector.
  11. // We register it with a priority of 80 to run it right before SVG,
  12. // but after other magic number detectors.
  13. RegisterDetector(80, IsTIFF)
  14. }
  15. // IsTIFF detects if the image is a TIFF
  16. func IsTIFF(r bufreader.ReadPeeker, ct, ext string) (Type, error) {
  17. b, err := r.Peek(max(len(tiffLE), len(tiffBE)))
  18. if err != nil {
  19. return Unknown, err
  20. }
  21. // If the file is detected as TIFF, but has a RAW extension, we skip it
  22. // since it is false positive.
  23. if (hasMagicBytes(b, tiffLE) || hasMagicBytes(b, tiffBE)) && !IsRawExtOrMime(ct, ext) {
  24. return TIFF, nil
  25. }
  26. return Unknown, nil
  27. }