model.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package metadata
  2. import (
  3. "errors"
  4. "image/jpeg"
  5. "path/filepath"
  6. "imuslab.com/arozos/mod/filesystem"
  7. "imuslab.com/arozos/mod/filesystem/renderer"
  8. )
  9. func generateThumbnailForModel(fsh *filesystem.FileSystemHandler, cacheFolder string, file string, generateOnly bool) (string, error) {
  10. if fsh.RequireBuffer {
  11. return "", nil
  12. }
  13. fshAbs := fsh.FileSystemAbstraction
  14. if !fshAbs.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. if err != nil {
  28. return "", err
  29. }
  30. opt := jpeg.Options{
  31. Quality: 90,
  32. }
  33. f, err := fshAbs.Create(outputFile)
  34. if err != nil {
  35. return "", err
  36. }
  37. err = jpeg.Encode(f, img, &opt)
  38. if err != nil {
  39. return "", err
  40. }
  41. f.Close()
  42. if !generateOnly && fshAbs.FileExists(outputFile) {
  43. //return the image as well
  44. ctx, err := getImageAsBase64(fsh, outputFile)
  45. return ctx, err
  46. } else if !fshAbs.FileExists(outputFile) {
  47. return "", errors.New("Image generation failed")
  48. }
  49. return "", nil
  50. }