mirror of
https://github.com/imgproxy/imgproxy.git
synced 2025-09-27 12:07:59 +02:00
Fix HEIC/AVIF dimension limit handling
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
### Fix
|
||||
- Fix HEIC/AVIF dimension limit handling.
|
||||
|
||||
## [3.24.1] - 2024-04-30
|
||||
## Fix
|
||||
### Fix
|
||||
- Fix the default `IMGPROXY_WORKERS` value when cgroup limits are applied.
|
||||
|
||||
## [3.24.0] - 2024-04-29
|
||||
|
@@ -14,6 +14,7 @@ import (
|
||||
const (
|
||||
// https://chromium.googlesource.com/webm/libwebp/+/refs/heads/master/src/webp/encode.h#529
|
||||
webpMaxDimension = 16383.0
|
||||
heifMaxDimension = 16384.0
|
||||
gifMaxDimension = 65535.0
|
||||
icoMaxDimension = 256.0
|
||||
)
|
||||
@@ -35,6 +36,23 @@ func fixWebpSize(img *vips.Image) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func fixHeifSize(img *vips.Image) error {
|
||||
heifLimitShrink := float64(imath.Max(img.Width(), img.Height())) / heifMaxDimension
|
||||
|
||||
if heifLimitShrink <= 1.0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
scale := 1.0 / heifLimitShrink
|
||||
if err := img.Resize(scale, scale); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Warningf("AVIF/HEIC dimension size is limited to %d. The image is rescaled to %dx%d", int(heifMaxDimension), img.Width(), img.Height())
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func fixGifSize(img *vips.Image) error {
|
||||
gifMaxResolution := float64(vips.GifResolutionLimit())
|
||||
gifResLimitShrink := float64(img.Width()*img.Height()) / gifMaxResolution
|
||||
@@ -77,6 +95,8 @@ func fixSize(pctx *pipelineContext, img *vips.Image, po *options.ProcessingOptio
|
||||
switch po.Format {
|
||||
case imagetype.WEBP:
|
||||
return fixWebpSize(img)
|
||||
case imagetype.AVIF, imagetype.HEIC:
|
||||
return fixHeifSize(img)
|
||||
case imagetype.GIF:
|
||||
return fixGifSize(img)
|
||||
case imagetype.ICO:
|
||||
|
Reference in New Issue
Block a user