mirror of
https://github.com/imgproxy/imgproxy.git
synced 2025-01-18 11:12:10 +02:00
Drop deprecated stuff (MaxSrcDimension, GZipCompression, IMGPROXY_MAX_GIF_FRAMES, resizeCrop)
This commit is contained in:
parent
53f8b0dbdd
commit
baf00f64f2
32
config.go
32
config.go
@ -215,7 +215,6 @@ type config struct {
|
||||
|
||||
PathPrefix string
|
||||
|
||||
MaxSrcDimension int
|
||||
MaxSrcResolution int
|
||||
MaxSrcFileSize int
|
||||
MaxAnimationFrames int
|
||||
@ -227,7 +226,6 @@ type config struct {
|
||||
PngQuantizationColors int
|
||||
Quality int
|
||||
FormatQuality map[imageType]int
|
||||
GZipCompression int
|
||||
StripMetadata bool
|
||||
StripColorProfile bool
|
||||
AutoRotate bool
|
||||
@ -305,7 +303,6 @@ type config struct {
|
||||
|
||||
FreeMemoryInterval int
|
||||
DownloadBufferSize int
|
||||
GZipBufferSize int
|
||||
BufferPoolCalibrationThreshold int
|
||||
}
|
||||
|
||||
@ -367,15 +364,10 @@ func configure() error {
|
||||
|
||||
strEnvConfig(&conf.PathPrefix, "IMGPROXY_PATH_PREFIX")
|
||||
|
||||
intEnvConfig(&conf.MaxSrcDimension, "IMGPROXY_MAX_SRC_DIMENSION")
|
||||
megaIntEnvConfig(&conf.MaxSrcResolution, "IMGPROXY_MAX_SRC_RESOLUTION")
|
||||
intEnvConfig(&conf.MaxSrcFileSize, "IMGPROXY_MAX_SRC_FILE_SIZE")
|
||||
intEnvConfig(&conf.MaxSvgCheckBytes, "IMGPROXY_MAX_SVG_CHECK_BYTES")
|
||||
|
||||
if _, ok := os.LookupEnv("IMGPROXY_MAX_GIF_FRAMES"); ok {
|
||||
logWarning("`IMGPROXY_MAX_GIF_FRAMES` is deprecated and will be removed in future versions. Use `IMGPROXY_MAX_ANIMATION_FRAMES` instead")
|
||||
intEnvConfig(&conf.MaxAnimationFrames, "IMGPROXY_MAX_GIF_FRAMES")
|
||||
}
|
||||
intEnvConfig(&conf.MaxAnimationFrames, "IMGPROXY_MAX_ANIMATION_FRAMES")
|
||||
|
||||
strSliceEnvConfig(&conf.AllowedSources, "IMGPROXY_ALLOWED_SOURCES")
|
||||
@ -386,7 +378,6 @@ func configure() error {
|
||||
intEnvConfig(&conf.PngQuantizationColors, "IMGPROXY_PNG_QUANTIZATION_COLORS")
|
||||
intEnvConfig(&conf.Quality, "IMGPROXY_QUALITY")
|
||||
formatQualityEnvConfig(conf.FormatQuality, "IMGPROXY_FORMAT_QUALITY")
|
||||
intEnvConfig(&conf.GZipCompression, "IMGPROXY_GZIP_COMPRESSION")
|
||||
boolEnvConfig(&conf.StripMetadata, "IMGPROXY_STRIP_METADATA")
|
||||
boolEnvConfig(&conf.StripColorProfile, "IMGPROXY_STRIP_COLOR_PROFILE")
|
||||
boolEnvConfig(&conf.AutoRotate, "IMGPROXY_AUTO_ROTATE")
|
||||
@ -479,7 +470,6 @@ func configure() error {
|
||||
|
||||
intEnvConfig(&conf.FreeMemoryInterval, "IMGPROXY_FREE_MEMORY_INTERVAL")
|
||||
intEnvConfig(&conf.DownloadBufferSize, "IMGPROXY_DOWNLOAD_BUFFER_SIZE")
|
||||
intEnvConfig(&conf.GZipBufferSize, "IMGPROXY_GZIP_BUFFER_SIZE")
|
||||
intEnvConfig(&conf.BufferPoolCalibrationThreshold, "IMGPROXY_BUFFER_POOL_CALIBRATION_THRESHOLD")
|
||||
|
||||
if len(conf.Keys) != len(conf.Salts) {
|
||||
@ -529,12 +519,6 @@ func configure() error {
|
||||
return fmt.Errorf("TTL should be greater than 0, now - %d\n", conf.TTL)
|
||||
}
|
||||
|
||||
if conf.MaxSrcDimension < 0 {
|
||||
return fmt.Errorf("Max src dimension should be greater than or equal to 0, now - %d\n", conf.MaxSrcDimension)
|
||||
} else if conf.MaxSrcDimension > 0 {
|
||||
logWarning("IMGPROXY_MAX_SRC_DIMENSION is deprecated and can be removed in future versions. Use IMGPROXY_MAX_SRC_RESOLUTION")
|
||||
}
|
||||
|
||||
if conf.MaxSrcResolution <= 0 {
|
||||
return fmt.Errorf("Max src resolution should be greater than 0, now - %d\n", conf.MaxSrcResolution)
|
||||
}
|
||||
@ -559,16 +543,6 @@ func configure() error {
|
||||
return fmt.Errorf("Quality can't be greater than 100, now - %d\n", conf.Quality)
|
||||
}
|
||||
|
||||
if conf.GZipCompression < 0 {
|
||||
return fmt.Errorf("GZip compression should be greater than or equal to 0, now - %d\n", conf.GZipCompression)
|
||||
} else if conf.GZipCompression > 9 {
|
||||
return fmt.Errorf("GZip compression can't be greater than 9, now - %d\n", conf.GZipCompression)
|
||||
}
|
||||
|
||||
if conf.GZipCompression > 0 {
|
||||
logWarning("GZip compression is deprecated and can be removed in future versions")
|
||||
}
|
||||
|
||||
if conf.IgnoreSslVerification {
|
||||
logWarning("Ignoring SSL verification is very unsafe")
|
||||
}
|
||||
@ -614,12 +588,6 @@ func configure() error {
|
||||
return fmt.Errorf("Download buffer size can't be greater than %d", math.MaxInt32)
|
||||
}
|
||||
|
||||
if conf.GZipBufferSize < 0 {
|
||||
return fmt.Errorf("GZip buffer size should be greater than or equal to 0")
|
||||
} else if conf.GZipBufferSize > math.MaxInt32 {
|
||||
return fmt.Errorf("GZip buffer size can't be greater than %d", math.MaxInt32)
|
||||
}
|
||||
|
||||
if conf.BufferPoolCalibrationThreshold < 64 {
|
||||
return fmt.Errorf("Buffer pool calibration threshold should be greater than or equal to 64")
|
||||
}
|
||||
|
@ -89,7 +89,6 @@ Also you may want imgproxy to respond with the same error message that it writes
|
||||
|
||||
* `IMGPROXY_QUALITY`: default quality of the resulting image, percentage. Default: `80`;
|
||||
* `IMGPROXY_FORMAT_QUALITY`: default quality of the resulting image per format, comma divided. Example: `jpeg=70,avif=40,webp=60`. When value for the resulting format is not set, `IMGPROXY_QUALITY` value is used. Default: `avif=50`.
|
||||
* `IMGPROXY_GZIP_COMPRESSION`: GZip compression level. Default: `5`.
|
||||
|
||||
### Advanced JPEG compression
|
||||
|
||||
|
@ -8,10 +8,6 @@ There are some imgproxy options that can help you to optimize memory usage and d
|
||||
|
||||
imgproxy uses memory buffers to download source images. While these buffers are empty at the start by default, they can grow to a required size when imgproxy downloads an image. Allocating new memory to grow the buffers can cause memory fragmentation. Allocating required memory at the start can eliminate much of memory fragmentation since buffers won't grow. Setting `IMGPROXY_DOWNLOAD_BUFFER_SIZE` will tell imgproxy to initialize download buffers with _at least_ the specified size. It's recommended to use the estimated 95 percentile of your image sizes as the initial download buffers size.
|
||||
|
||||
### IMGPROXY_GZIP_BUFFER_SIZE
|
||||
|
||||
The same as `IMGPROXY_DOWNLOAD_BUFFER_SIZE` but for GZip buffers. If you use GZip compression of the resulting images, you can reduce memory fragmentation by using the estimated maximum size of the GZipped resulting image as the initial size of GZip buffers.
|
||||
|
||||
### IMGPROXY_FREE_MEMORY_INTERVAL
|
||||
|
||||
Working with a large amount of data can cause allocating some memory that is not used most of the time. That's why imgproxy enforces Go's garbage collector to free as much memory as possible and return it to the OS. The default interval of this action is 10 seconds, but you can change it by setting `IMGPROXY_FREE_MEMORY_INTERVAL`. Decreasing the interval can smooth the memory usage graph but it can also slow down imgproxy a little. Increasing has the opposite effect.
|
||||
|
@ -20,7 +20,6 @@ var (
|
||||
cacheControlHeaderCtxKey = ctxKey("cacheControlHeader")
|
||||
expiresHeaderCtxKey = ctxKey("expiresHeader")
|
||||
|
||||
errSourceDimensionsTooBig = newError(422, "Source image dimensions are too big", "Invalid source image")
|
||||
errSourceResolutionTooBig = newError(422, "Source image resolution is too big", "Invalid source image")
|
||||
errSourceFileTooBig = newError(422, "Source image file is too big", "Invalid source image")
|
||||
errSourceImageTypeNotSupported = newError(422, "Source image type not supported", "Invalid source image")
|
||||
@ -100,10 +99,6 @@ func initDownloading() error {
|
||||
}
|
||||
|
||||
func checkDimensions(width, height int) error {
|
||||
if conf.MaxSrcDimension > 0 && (width > conf.MaxSrcDimension || height > conf.MaxSrcDimension) {
|
||||
return errSourceDimensionsTooBig
|
||||
}
|
||||
|
||||
if width*height > conf.MaxSrcResolution {
|
||||
return errSourceResolutionTooBig
|
||||
}
|
||||
|
70
gzippool.go
70
gzippool.go
@ -1,70 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type gzipPool struct {
|
||||
mutex sync.Mutex
|
||||
top *gzipPoolEntry
|
||||
}
|
||||
|
||||
type gzipPoolEntry struct {
|
||||
gz *gzip.Writer
|
||||
next *gzipPoolEntry
|
||||
}
|
||||
|
||||
func newGzipPool(n int) (*gzipPool, error) {
|
||||
pool := new(gzipPool)
|
||||
|
||||
for i := 0; i < n; i++ {
|
||||
if err := pool.grow(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return pool, nil
|
||||
}
|
||||
|
||||
func (p *gzipPool) grow() error {
|
||||
gz, err := gzip.NewWriterLevel(ioutil.Discard, conf.GZipCompression)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Can't init GZip compression: %s", err)
|
||||
}
|
||||
|
||||
p.top = &gzipPoolEntry{
|
||||
gz: gz,
|
||||
next: p.top,
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *gzipPool) Get(w io.Writer) *gzip.Writer {
|
||||
p.mutex.Lock()
|
||||
defer p.mutex.Unlock()
|
||||
|
||||
if p.top == nil {
|
||||
p.grow()
|
||||
}
|
||||
|
||||
gz := p.top.gz
|
||||
gz.Reset(w)
|
||||
|
||||
p.top = p.top.next
|
||||
|
||||
return gz
|
||||
}
|
||||
|
||||
func (p *gzipPool) Put(gz *gzip.Writer) {
|
||||
p.mutex.Lock()
|
||||
defer p.mutex.Unlock()
|
||||
|
||||
gz.Reset(ioutil.Discard)
|
||||
|
||||
p.top = &gzipPoolEntry{gz: gz, next: p.top}
|
||||
}
|
@ -828,15 +828,6 @@ func processImage(ctx context.Context) ([]byte, context.CancelFunc, error) {
|
||||
}
|
||||
}
|
||||
|
||||
if po.ResizingType == resizeCrop {
|
||||
logWarning("`crop` resizing type is deprecated and will be removed in future versions. Use `crop` processing option instead")
|
||||
|
||||
po.Crop.Width, po.Crop.Height = float64(po.Width), float64(po.Height)
|
||||
|
||||
po.ResizingType = resizeFit
|
||||
po.Width, po.Height = 0, 0
|
||||
}
|
||||
|
||||
animationSupport := conf.MaxAnimationFrames > 1 && vipsSupportAnimation(imgdata.Type) && vipsSupportAnimation(po.Format)
|
||||
|
||||
pages := 1
|
||||
|
@ -10,9 +10,6 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
responseGzipBufPool *bufPool
|
||||
responseGzipPool *gzipPool
|
||||
|
||||
processingSem chan struct{}
|
||||
|
||||
headerVaryValue string
|
||||
@ -24,23 +21,12 @@ func initProcessingHandler() error {
|
||||
|
||||
processingSem = make(chan struct{}, conf.Concurrency)
|
||||
|
||||
if conf.GZipCompression > 0 {
|
||||
responseGzipBufPool = newBufPool("gzip", conf.Concurrency, conf.GZipBufferSize)
|
||||
if responseGzipPool, err = newGzipPool(conf.Concurrency); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
vary := make([]string, 0)
|
||||
|
||||
if conf.EnableWebpDetection || conf.EnforceWebp {
|
||||
vary = append(vary, "Accept")
|
||||
}
|
||||
|
||||
if conf.GZipCompression > 0 {
|
||||
vary = append(vary, "Accept-Encoding")
|
||||
}
|
||||
|
||||
if conf.EnableClientHints {
|
||||
vary = append(vary, "DPR", "Viewport-Width", "Width")
|
||||
}
|
||||
@ -98,36 +84,18 @@ func respondWithImage(ctx context.Context, reqID string, r *http.Request, rw htt
|
||||
rw.Header().Set("Vary", headerVaryValue)
|
||||
}
|
||||
|
||||
if conf.GZipCompression > 0 && strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") {
|
||||
buf := responseGzipBufPool.Get(0)
|
||||
defer responseGzipBufPool.Put(buf)
|
||||
|
||||
gz := responseGzipPool.Get(buf)
|
||||
defer responseGzipPool.Put(gz)
|
||||
|
||||
gz.Write(data)
|
||||
gz.Close()
|
||||
|
||||
rw.Header().Set("Content-Encoding", "gzip")
|
||||
rw.Header().Set("Content-Length", strconv.Itoa(buf.Len()))
|
||||
|
||||
rw.WriteHeader(200)
|
||||
rw.Write(buf.Bytes())
|
||||
} else {
|
||||
rw.Header().Set("Content-Length", strconv.Itoa(len(data)))
|
||||
rw.WriteHeader(200)
|
||||
rw.Write(data)
|
||||
}
|
||||
|
||||
if conf.EnableDebugHeaders {
|
||||
imgdata := getImageData(ctx)
|
||||
rw.Header().Set("X-Origin-Content-Length", strconv.Itoa(len(imgdata.Data)))
|
||||
}
|
||||
|
||||
rw.Header().Set("Content-Length", strconv.Itoa(len(data)))
|
||||
rw.WriteHeader(200)
|
||||
rw.Write(data)
|
||||
|
||||
imageURL := getImageURL(ctx)
|
||||
|
||||
logResponse(reqID, r, 200, nil, &imageURL, po)
|
||||
// logResponse(reqID, r, 200, getTimerSince(ctx), getImageURL(ctx), po))
|
||||
}
|
||||
|
||||
func respondWithNotModified(ctx context.Context, reqID string, r *http.Request, rw http.ResponseWriter) {
|
||||
|
@ -64,14 +64,12 @@ type resizeType int
|
||||
const (
|
||||
resizeFit resizeType = iota
|
||||
resizeFill
|
||||
resizeCrop
|
||||
resizeAuto
|
||||
)
|
||||
|
||||
var resizeTypes = map[string]resizeType{
|
||||
"fit": resizeFit,
|
||||
"fill": resizeFill,
|
||||
"crop": resizeCrop,
|
||||
"auto": resizeAuto,
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user