feat(images): JPEG XL optimizer with webp/jpg fallback and <picture> serving

img_optimize() decodes .jxl with djxl or Imagick, resizes with GD, re-encodes
with cjxl and writes foto.jxl.webp beside it; skips cleanly without a decoder.
Gallery, hero, navbar logos and JSON-LD serve the JXL with the fallback, and
trash/removal move the fallback with its .jxl.
This commit is contained in:
andre committed 2026-10-26 11:18:13 +00:00
1 parent 8fe73eb5d6
commit 4f44bc1609
14 files changed
+260 -20

No files matched your search

+1
View File
@@ -313,6 +313,7 @@ function gyms_remove_image(?string $rel): void {
if (!preg_match('~^uploads/gyms/[A-Za-z0-9_.-]+$~', $rel)) return;
$path = gyms_upload_dir() . basename($rel);
if (is_file($path)) @unlink($path);
img_fallback_follow($path);
}
// Single-field setter for views/admin/reviews/index.php — that page only