imageproc_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package qwen2vl
  2. import (
  3. "bytes"
  4. "image"
  5. "image/png"
  6. "testing"
  7. )
  8. func TestSmartResize(t *testing.T) {
  9. type smartResizeCase struct {
  10. TestImage image.Image
  11. Expected image.Point
  12. }
  13. cases := []smartResizeCase{
  14. {
  15. TestImage: image.NewRGBA(image.Rect(0, 0, 1024, 1024)),
  16. Expected: image.Point{980, 980},
  17. },
  18. {
  19. TestImage: image.NewRGBA(image.Rect(0, 0, 1024, 768)),
  20. Expected: image.Point{1036, 756},
  21. },
  22. {
  23. TestImage: image.NewRGBA(image.Rect(0, 0, 2000, 2000)),
  24. Expected: image.Point{980, 980},
  25. },
  26. }
  27. for _, c := range cases {
  28. b := c.TestImage.Bounds().Max
  29. actual := smartResize(b, DefaultFactor, DefaultMinPixels, DefaultMaxPixels)
  30. if actual != c.Expected {
  31. t.Errorf("expected: %v, actual: %v", c.Expected, actual)
  32. }
  33. }
  34. }
  35. func TestPreprocess(t *testing.T) {
  36. type preprocessCase struct {
  37. TestImage image.Image
  38. ExpectedLen int
  39. }
  40. cases := []preprocessCase{
  41. {
  42. TestImage: image.NewRGBA(image.Rect(0, 0, 256, 256)),
  43. ExpectedLen: 252 * 252 * 3 * 1,
  44. },
  45. {
  46. TestImage: image.NewRGBA(image.Rect(0, 0, 2000, 2000)),
  47. ExpectedLen: 980 * 980 * 3 * 1,
  48. },
  49. }
  50. for _, c := range cases {
  51. var buf bytes.Buffer
  52. err := png.Encode(&buf, c.TestImage)
  53. if err != nil {
  54. t.Fatal(err)
  55. }
  56. imgData, _, err := Preprocess(&buf)
  57. if err != nil {
  58. t.Fatalf("error processing: %q", err)
  59. }
  60. switch len(imgData) {
  61. case 0:
  62. t.Errorf("no image data returned")
  63. case c.ExpectedLen:
  64. // ok
  65. default:
  66. t.Errorf("unexpected image data length: %d, expected: %d", len(imgData), c.ExpectedLen)
  67. }
  68. }
  69. }