Crop the centre before resizing for fit=cover (closes #282)
check / check (push) Canceled after 0s
check / check (push) Canceled after 0s
For fit=cover, the default fit, libvips' thumbnail scaled the whole source to cover the requested size and copied that into memory before cutting out the centre, so an 8192x64 source at 8192x8192 asked for about 24 GiB, and 8192x1 failed with 500. resize now first cuts the centre of the source, widened to whole source pixels, and gives only that to thumbnail, which scales both sides by the same amount as before; the image it holds exceeds the output by less than one scaled source pixel on each side. Output size and scale are unchanged; its position can move by up to one output pixel. Model: opus-5-5
This commit was merged in pull request #284.
This commit is contained in:
@@ -30,6 +30,18 @@ P2: security: per-origin rate limiting
|
||||
|
||||
# Completed Steps
|
||||
|
||||
- 2026-10-15 a thin source requested with `fit=cover` no longer makes libvips
|
||||
build a huge image (closes #282): libvips' thumbnail scaled the whole source
|
||||
to cover the requested size and copied that into memory before it cut out the
|
||||
centre, so an 8192x64 source at 8192x8192 made it allocate about 24 GiB, and
|
||||
an 8192x1 source answered 500. The image processor now first cuts the centre
|
||||
of the source, widened to whole source pixels, and thumbnail scales and cuts
|
||||
only that, by the same amount on both sides as before. What it copies into
|
||||
memory is then larger than the output by less than one scaled source pixel on
|
||||
each side. With the runtime image's libvips and JPEG output at 8192x8192,
|
||||
resident memory peaked at about 242 MiB for the 8192x64 source and 431 MiB for
|
||||
the 8192x1 one. The output can sit a fraction of an output pixel from where it
|
||||
was.
|
||||
- 2026-10-15 a `/v1/image/` URL whose source path or source query holds a `#`,
|
||||
written as `%23`, is refused with 400 (closes #286): the source URL built from
|
||||
it ended at the `#` when fetched, so each text after it fetched the same
|
||||
|
||||
Reference in New Issue
Block a user