Pure PHP backend decodes PNG (IHDR+IDAT+zlib), resizes with bilinear
interpolation, and encodes back to PNG — zero extension dependencies.
Supports RGB, RGBA, and indexed PNG color types.
Priority: GD → Imagick → pure PHP. Falls back gracefully.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Support all common image formats (PNG, JPEG, GIF, WebP, BMP)
not just PNG — uses getimagesize() to detect type
- Add Log::add() warnings when generation fails (GD missing,
file not found, unsupported format)
- Fix source path: try both direct path and images/ prefix
to handle Joomla media field variations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New "Favicon" tab in template config with media picker for PNG upload
- helper/favicon.php generates all standard sizes from source PNG using GD:
- favicon.ico (16x16 + 32x32 embedded)
- apple-touch-icon.png (180x180)
- favicon-32x32.png, favicon-16x16.png
- android-chrome-192x192.png, android-chrome-512x512.png
- site.webmanifest for PWA icon discovery
- Generated files cached in images/favicons/ with timestamp checking
- Link tags auto-injected in <head> when favicon source is configured
- Language strings added for en-GB and en-US
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>