model.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package metadata
  2. import (
  3. "errors"
  4. "image/jpeg"
  5. "os"
  6. "path/filepath"
  7. "imuslab.com/arozos/mod/filesystem"
  8. "imuslab.com/arozos/mod/filesystem/renderer"
  9. )
  10. func generateThumbnailForModel(fsh *filesystem.FileSystemHandler, cacheFolder string, file string, generateOnly bool) (string, error) {
  11. if fsh.RequireBuffer {
  12. return "", nil
  13. }
  14. if !fileExists(file) {
  15. //The user removed this file before the thumbnail is finished
  16. return "", errors.New("Source not exists")
  17. }
  18. //Generate a render of the 3d model
  19. outputFile := cacheFolder + filepath.Base(file) + ".jpg"
  20. r := renderer.NewRenderer(renderer.RenderOption{
  21. Color: "#f2f542",
  22. BackgroundColor: "#ffffff",
  23. Width: 480,
  24. Height: 480,
  25. })
  26. img, err := r.RenderModel(file)
  27. opt := jpeg.Options{
  28. Quality: 90,
  29. }
  30. f, err := os.Create(outputFile)
  31. if err != nil {
  32. return "", err
  33. }
  34. err = jpeg.Encode(f, img, &opt)
  35. f.Close()
  36. if !generateOnly && fileExists(outputFile) {
  37. //return the image as well
  38. ctx, err := getImageAsBase64(fsh, outputFile)
  39. return ctx, err
  40. } else if !fileExists(outputFile) {
  41. return "", errors.New("Image generation failed")
  42. }
  43. return "", nil
  44. }