github.com/status-im/status-go@v1.1.0/images/main.go (about)

     1  package images
     2  
     3  import (
     4  	"bytes"
     5  	"image"
     6  )
     7  
     8  func GenerateImageVariants(cImg image.Image) ([]IdentityImage, error) {
     9  	var iis []IdentityImage
    10  	var err error
    11  
    12  	for _, s := range ResizeDimensions {
    13  		rImg := Resize(s, cImg)
    14  
    15  		bb := bytes.NewBuffer([]byte{})
    16  		err = EncodeToBestSize(bb, rImg, s)
    17  		if err != nil {
    18  			return nil, err
    19  		}
    20  
    21  		ii := IdentityImage{
    22  			Name:         ResizeDimensionToName[s],
    23  			Payload:      bb.Bytes(),
    24  			Width:        rImg.Bounds().Dx(),
    25  			Height:       rImg.Bounds().Dy(),
    26  			FileSize:     bb.Len(),
    27  			ResizeTarget: int(s),
    28  		}
    29  
    30  		iis = append(iis, ii)
    31  	}
    32  
    33  	return iis, nil
    34  }
    35  
    36  func GenerateIdentityImages(filepath string, aX, aY, bX, bY int) ([]IdentityImage, error) {
    37  	img, err := Decode(filepath)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	cropRect := image.Rectangle{
    43  		Min: image.Point{X: aX, Y: aY},
    44  		Max: image.Point{X: bX, Y: bY},
    45  	}
    46  	cImg, err := Crop(img, cropRect)
    47  	if err != nil {
    48  		return nil, err
    49  	}
    50  
    51  	return GenerateImageVariants(cImg)
    52  }
    53  
    54  func GenerateIdentityImagesFromURL(url string) ([]IdentityImage, error) {
    55  	img, err := DecodeFromURL(url)
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  
    60  	cImg, err := CropCenter(img)
    61  	if err != nil {
    62  		return nil, err
    63  	}
    64  
    65  	return GenerateImageVariants(cImg)
    66  }
    67  
    68  func GenerateBannerImage(filepath string, aX, aY, bX, bY int) (*IdentityImage, error) {
    69  	img, err := Decode(filepath)
    70  	if err != nil {
    71  		return nil, err
    72  	}
    73  
    74  	cropRect := image.Rectangle{
    75  		Min: image.Point{X: aX, Y: aY},
    76  		Max: image.Point{X: bX, Y: bY},
    77  	}
    78  	croppedImg, err := Crop(img, cropRect)
    79  	if err != nil {
    80  		return nil, err
    81  	}
    82  
    83  	resizedImg := ShrinkOnly(BannerDim, croppedImg)
    84  
    85  	sizeLimits := GetBannerDimensionLimits()
    86  
    87  	bb := bytes.NewBuffer([]byte{})
    88  	err = EncodeToLimits(bb, resizedImg, sizeLimits)
    89  	if err != nil {
    90  		return nil, err
    91  	}
    92  
    93  	ii := &IdentityImage{
    94  		Name:         BannerIdentityName,
    95  		Payload:      bb.Bytes(),
    96  		Width:        resizedImg.Bounds().Dx(),
    97  		Height:       resizedImg.Bounds().Dy(),
    98  		FileSize:     bb.Len(),
    99  		ResizeTarget: int(BannerDim),
   100  	}
   101  
   102  	return ii, nil
   103  }