123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package vips
- /*
- #include "vips.h"
- */
- import "C"
- import (
- "errors"
- "github.com/imgproxy/imgproxy/v3/ensure"
- "github.com/imgproxy/imgproxy/v3/env"
- )
- var (
- IMGPROXY_JPEG_PROGRESSIVE = env.Describe("IMGPROXY_JPEG_PROGRESSIVE", "boolean")
- IMGPROXY_PNG_INTERLACED = env.Describe("IMGPROXY_PNG_INTERLACED", "boolean")
- IMGPROXY_PNG_QUANTIZE = env.Describe("IMGPROXY_PNG_QUANTIZE", "boolean")
- IMGPROXY_PNG_QUANTIZATION_COLORS = env.Describe("IMGPROXY_PNG_QUANTIZATION_COLORS", "number between 2 and 256")
- IMGPROXY_WEBP_PRESET = env.DescribeByMap("IMGPROXY_WEBP_PRESET", WebpPresets)
- IMGPROXY_AVIF_SPEED = env.Describe("IMGPROXY_AVIF_SPEED", "number between 0 and 9")
- IMGPROXY_WEBP_EFFORT = env.Describe("IMGPROXY_WEBP_EFFORT", "number between 1 and 6")
- IMGPROXY_JXL_EFFORT = env.Describe("IMGPROXY_JXL_EFFORT", "number between 1 and 9")
- IMGPROXY_PNG_UNLIMITED = env.Describe("IMGPROXY_PNG_UNLIMITED", "boolean")
- IMGPROXY_SVG_UNLIMITED = env.Describe("IMGPROXY_SVG_UNLIMITED", "boolean")
- IMGPROXY_VIPS_LEAK_CHECK = env.Describe("IMGPROXY_VIPS_LEAK_CHECK", "boolean")
- IMGPROXY_VIPS_CACHE_TRACE = env.Describe("IMGPROXY_VIPS_CACHE_TRACE", "boolean")
- )
- type Config struct {
- // Whether to save JPEG as progressive
- JpegProgressive bool
- // Whether to save PNG as interlaced
- PngInterlaced bool
- // Whether to save PNG with adaptive palette
- PngQuantize bool
- // Number of colors for adaptive palette
- PngQuantizationColors int
- // WebP preset to use when saving WebP images
- WebpPreset WebpPreset
- // AVIF saving speed
- AvifSpeed int
- // WebP saving effort
- WebpEffort int
- // JPEG XL saving effort
- JxlEffort int
- // Whether to not apply any limits when loading PNG
- PngUnlimited bool
- // Whether to not apply any limits when loading JPEG
- SvgUnlimited bool
- // Whether to enable libvips memory leak check
- LeakCheck bool
- // Whether to enable libvips operation cache tracing
- CacheTrace bool
- }
- func NewDefaultConfig() Config {
- return Config{
- JpegProgressive: false,
- PngInterlaced: false,
- PngQuantize: false,
- PngQuantizationColors: 256,
- WebpPreset: C.VIPS_FOREIGN_WEBP_PRESET_DEFAULT,
- AvifSpeed: 8,
- WebpEffort: 4,
- JxlEffort: 4,
- PngUnlimited: false,
- SvgUnlimited: false,
- LeakCheck: false,
- CacheTrace: false,
- }
- }
- func LoadConfigFromEnv(c *Config) (*Config, error) {
- c = ensure.Ensure(c, NewDefaultConfig)
- err := errors.Join(
- env.Bool(&c.JpegProgressive, IMGPROXY_JPEG_PROGRESSIVE),
- env.Bool(&c.PngInterlaced, IMGPROXY_PNG_INTERLACED),
- env.Bool(&c.PngQuantize, IMGPROXY_PNG_QUANTIZE),
- env.Int(&c.PngQuantizationColors, IMGPROXY_PNG_QUANTIZATION_COLORS),
- env.Int(&c.AvifSpeed, IMGPROXY_AVIF_SPEED),
- env.Int(&c.WebpEffort, IMGPROXY_WEBP_EFFORT),
- env.Int(&c.JxlEffort, IMGPROXY_JXL_EFFORT),
- env.Bool(&c.PngUnlimited, IMGPROXY_PNG_UNLIMITED),
- env.Bool(&c.SvgUnlimited, IMGPROXY_SVG_UNLIMITED),
- env.FromMap(&c.WebpPreset, WebpPresets, IMGPROXY_WEBP_PRESET),
- env.Bool(&c.LeakCheck, IMGPROXY_VIPS_LEAK_CHECK),
- env.Bool(&c.CacheTrace, IMGPROXY_VIPS_CACHE_TRACE),
- )
- return c, err
- }
- func (c *Config) Validate() error {
- if c.PngQuantizationColors < 2 || c.PngQuantizationColors > 256 {
- return IMGPROXY_PNG_QUANTIZATION_COLORS.ErrorRange()
- }
- if c.WebpPreset < C.VIPS_FOREIGN_WEBP_PRESET_DEFAULT || c.WebpPreset >= C.VIPS_FOREIGN_WEBP_PRESET_LAST {
- return IMGPROXY_WEBP_PRESET.ErrorRange()
- }
- if c.AvifSpeed < 0 || c.AvifSpeed > 9 {
- return IMGPROXY_AVIF_SPEED.ErrorRange()
- }
- if c.JxlEffort < 1 || c.JxlEffort > 9 {
- return IMGPROXY_JXL_EFFORT.ErrorRange()
- }
- if c.WebpEffort < 1 || c.WebpEffort > 6 {
- return IMGPROXY_WEBP_EFFORT.ErrorRange()
- }
- return nil
- }
|