0
Fork 0
mirror of https://github.com/willnorris/imageproxy.git synced 2024-12-16 21:56:43 -05:00
imageproxy/data/data.go

79 lines
1.6 KiB
Go
Raw Normal View History

// Package data provides common shared data structures for go-imageproxy.
package data
import (
"fmt"
"net/url"
"strconv"
"strings"
"time"
)
2013-12-05 02:12:44 -05:00
// Options specifies transformations that can be performed on a
// requested image.
2013-12-05 02:12:44 -05:00
type Options struct {
Width int // requested width, in pixels
Height int // requested height, in pixels
// If true, resize the image to fit in the specified dimensions. Image
// will not be cropped, and aspect ratio will be maintained.
Fit bool
}
2013-12-05 02:12:44 -05:00
func (o Options) String() string {
return fmt.Sprintf("%dx%d", o.Width, o.Height)
}
func ParseOptions(str string) *Options {
o := new(Options)
var h, w string
parts := strings.Split(str, ",")
// parse size
size := strings.SplitN(parts[0], "x", 2)
w = size[0]
if len(size) > 1 {
h = size[1]
} else {
h = w
}
if w != "" {
o.Width, _ = strconv.Atoi(w)
}
if h != "" {
o.Height, _ = strconv.Atoi(h)
}
for _, part := range parts[1:] {
if part == "fit" {
o.Fit = true
}
}
return o
}
type Request struct {
2013-12-05 02:12:44 -05:00
URL *url.URL // URL of the image to proxy
Options *Options // Image transformation to perform
}
// Image represents a remote image that is being proxied. It tracks where
// the image was originally retrieved from and how long the image can be cached.
type Image struct {
// URL of original remote image.
URL string
// Expires is the cache expiration time for the original image, as
// returned by the remote server.
Expires time.Time
// Etag returned from server when fetching image.
Etag string
// Bytes contains the actual image.
Bytes []byte
}