imagorpath

package
v1.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 1, 2022 License: Apache-2.0 Imports: 11 Imported by: 1

README

imagorpath

Parse and generate imagor endpoint using Go struct

import "github.com/cshum/imagor/imagorpath"

...

func Test(t *testing.T) {
	params := imagorpath.Params{
		Image:    "raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png",
		FitIn:    true,
		Width:    500,
		Height:   400,
		PaddingTop: 20,
		PaddingBottom: 20,
		Filters: imagorpath.Filters{
			{
				Name: "fill",
				Args: "white",
			},
		},
	}

	// generate signed imagor endpoint from Params struct with secret
	path := imagorpath.Generate(params, imagorpath.NewDefaultSigner("mysecret"))

	assert.Equal(t, path, "OyGJyvfYJw8xNkYDmXU-4NPA2U0=/fit-in/500x400/0x20/filters:fill(white)/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png")

	assert.Equal(t,
		// parse Params struct from signed imagor endpoint
		imagorpath.Parse(path),

		// Params include endpoint attributes with path and signed hash
		imagorpath.Params{
			Path:     "fit-in/500x400/0x20/filters:fill(white)/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png",
			Hash:     "OyGJyvfYJw8xNkYDmXU-4NPA2U0=",
			Image:    "raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png",
			FitIn:    true,
			Width:    500,
			Height:   400,
			PaddingTop: 20,
			PaddingBottom: 20,
			Filters: imagorpath.Filters{
				{
					Name: "fill",
					Args: "white",
				},
			},
		},
	)
}

Documentation

Index

Constants

View Source
const (
	TrimByTopLeft     = "top-left"
	TrimByBottomRight = "bottom-right"
	HAlignLeft        = "left"
	HAlignRight       = "right"
	VAlignTop         = "top"
	VAlignBottom      = "bottom"
)

Variables

View Source
var DigestResultStorageHasher = ResultStorageHasherFunc(func(p Params) string {
	if p.Path == "" {
		p.Path = GeneratePath(p)
	}
	return hexDigestPath(p.Path)
})
View Source
var DigestStorageHasher = StorageHasherFunc(hexDigestPath)
View Source
var SuffixResultStorageHasher = ResultStorageHasherFunc(func(p Params) string {
	if p.Path == "" {
		p.Path = GeneratePath(p)
	}
	var digest = sha1.Sum([]byte(p.Path))
	var hash = "." + hex.EncodeToString(digest[:])[:20]
	var dotIdx = strings.LastIndex(p.Image, ".")
	var slashIdx = strings.LastIndex(p.Image, "/")
	if dotIdx > -1 && slashIdx < dotIdx {
		ext := p.Image[dotIdx:]
		if p.Meta {
			ext = ".json"
		} else {
			for _, filter := range p.Filters {
				if filter.Name == "format" {
					ext = "." + filter.Args
				}
			}
		}
		return p.Image[:dotIdx] + hash + ext
	} else {
		return p.Image + hash
	}
})

Functions

func Generate

func Generate(p Params, signer Signer) string

Generate imagor endpoint with signature by Params struct with signer

func GeneratePath added in v0.8.16

func GeneratePath(p Params) string

GeneratePath generate imagor path by Params struct

func GenerateUnsafe

func GenerateUnsafe(p Params) string

GenerateUnsafe generate unsafe imagor endpoint by Params struct

func NewHMACSigner added in v0.8.23

func NewHMACSigner(alg func() hash.Hash, truncate int, secret string) *hmacSigner

NewHMACSigner custom HMAC alg signer with secret and string length based truncate

func Normalize added in v0.5.15

func Normalize(image string, safeChars SafeChars) string

Normalize imagor path to be file path friendly, optional escapeByte func for custom SafeChars

Types

type Filter

type Filter struct {
	Name string `json:"name,omitempty"`
	Args string `json:"args,omitempty"`
}

type Filters

type Filters []Filter

type Params

type Params struct {
	Params        bool    `json:"-"`
	Path          string  `json:"path,omitempty"`
	Image         string  `json:"image,omitempty"`
	Unsafe        bool    `json:"unsafe,omitempty"`
	Hash          string  `json:"hash,omitempty"`
	Meta          bool    `json:"meta,omitempty"`
	Trim          bool    `json:"trim,omitempty"`
	TrimBy        string  `json:"trim_by,omitempty"`
	TrimTolerance int     `json:"trim_tolerance,omitempty"`
	CropLeft      float64 `json:"crop_left,omitempty"`
	CropTop       float64 `json:"crop_top,omitempty"`
	CropRight     float64 `json:"crop_right,omitempty"`
	CropBottom    float64 `json:"crop_bottom,omitempty"`
	FitIn         bool    `json:"fit_in,omitempty"`
	Stretch       bool    `json:"stretch,omitempty"`
	Width         int     `json:"width,omitempty"`
	Height        int     `json:"height,omitempty"`
	PaddingLeft   int     `json:"padding_left,omitempty"`
	PaddingTop    int     `json:"padding_top,omitempty"`
	PaddingRight  int     `json:"padding_right,omitempty"`
	PaddingBottom int     `json:"padding_bottom,omitempty"`
	HFlip         bool    `json:"h_flip,omitempty"`
	VFlip         bool    `json:"v_flip,omitempty"`
	HAlign        string  `json:"h_align,omitempty"`
	VAlign        string  `json:"v_align,omitempty"`
	Smart         bool    `json:"smart,omitempty"`
	Filters       Filters `json:"filters,omitempty"`
}

Params image endpoint parameters

func Apply added in v0.9.0

func Apply(p Params, path string) Params

Apply Params struct from imagor endpoint URI on top of existing Params

func Parse

func Parse(path string) Params

Parse Params struct from imagor endpoint URI

type ResultStorageHasher added in v1.1.0

type ResultStorageHasher interface {
	HashResult(p Params) string
}

ResultStorageHasher define key for result storage

type ResultStorageHasherFunc added in v1.1.0

type ResultStorageHasherFunc func(p Params) string

ResultStorageHasherFunc ResultStorageHasher handler func

func (ResultStorageHasherFunc) HashResult added in v1.1.0

func (h ResultStorageHasherFunc) HashResult(p Params) string

type SafeChars added in v0.8.23

type SafeChars interface {
	ShouldEscape(c byte) bool
}

func NewSafeChars added in v0.8.23

func NewSafeChars(safechars string) SafeChars

type Signer added in v0.8.23

type Signer interface {
	Sign(path string) string
}

Signer imagor URL signature signer

func NewDefaultSigner added in v0.8.23

func NewDefaultSigner(secret string) Signer

NewDefaultSigner default signer using SHA1 with secret

type StorageHasher added in v1.1.0

type StorageHasher interface {
	Hash(image string) string
}

StorageHasher define image key for storage

type StorageHasherFunc added in v1.1.0

type StorageHasherFunc func(image string) string

StorageHasherFunc StorageHasher handler func

func (StorageHasherFunc) Hash added in v1.1.0

func (h StorageHasherFunc) Hash(image string) string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL