status-go/images/main_test.go
Stefan 63e58ba035 feat: add banner support for communities
Add banner image as a special `IdentityImage` beside "thumbnail" and "large"

Banner input cropped image processing

- Resize to keep in the limits of `BannerDim`
- Encode to match the file size limits define for banner
- Don't scale up. This can be done efficiently in the UI

Changes to `images` module

- Refactor `EncodeToBestSize` as `EncodeToLimits` to accept arbitrary dimensions
  and allow for custom size
- Define `DimensionLimits` for banner not to exceed 450 KB and a rough estimate
  for the ideal size
2022-05-27 14:42:14 +03:00

47 lines
1.4 KiB
Go

package images
import (
"image"
"image/png"
"os"
"testing"
"github.com/stretchr/testify/require"
)
func TestGenerateBannerImage_NoScaleUp(t *testing.T) {
// Test image 256x256
testImage := path + "status.png"
identityImage, err := GenerateBannerImage(testImage, 50, 50, 150, 100)
require.NoError(t, err)
require.Exactly(t, identityImage.Name, BannerIdentityName)
require.Positive(t, len(identityImage.Payload))
// Ensure we don't scale it up. That will be done inefficiently in backend instead of frontend
require.Exactly(t, identityImage.Width, 100)
require.Exactly(t, identityImage.Height, 50)
require.Exactly(t, identityImage.FileSize, len(identityImage.Payload))
require.Exactly(t, identityImage.ResizeTarget, int(BannerDim))
}
func TestGenerateBannerImage_ShrinkOnly(t *testing.T) {
// Generate test image bigger than BannerDim
testImage := image.NewRGBA(image.Rect(0, 0, int(BannerDim)+10, int(BannerDim)+20))
tmpTestFilePath := t.TempDir() + "/test.png"
file, err := os.Create(tmpTestFilePath)
require.NoError(t, err)
defer file.Close()
err = png.Encode(file, testImage)
require.NoError(t, err)
identityImage, error := GenerateBannerImage(tmpTestFilePath, 0, 0, int(BannerDim)+5, int(BannerDim)+10)
require.NoError(t, error)
require.Positive(t, len(identityImage.Payload))
// Ensure we scale it down by the small side
require.Exactly(t, identityImage.Width, int(BannerDim))
require.Exactly(t, identityImage.Height, 805)
}