094ikis09/webp-conversion-bundle
Installation:
composer require 094ikis09/webp-conversion-bundle
Ensure the bundle is enabled in config/bundles.php (Symfony auto-discovers it).
First Conversion: Run the command to scan and convert images in a directory (dry run first):
php bin/console codebuds:webp:convert public/uploads
Then execute the actual conversion:
php bin/console codebuds:webp:convert --create --quality=80 public/uploads
Twig Integration:
Add the Twig extension to your templates (check config/packages/twig.yaml for auto-registration). Use the filter in <picture> tags:
<picture>
<source srcset="{{ '/images/photo.jpg' | cb_webp }}" type="image/webp">
<img src="{{ '/images/photo.jpg' }}" alt="Fallback">
</picture>
Batch Conversion:
--create flag to generate .webp files in bulk (e.g., during deployments or asset updates).schedule:run or Symfony’s cron for periodic optimization:
* * * * * php bin/console codebuds:webp:convert --create --quality=75 /path/to/images
Dynamic Quality:
--quality per directory (e.g., higher for hero images, lower for thumbnails):
php bin/console codebuds:webp:convert --create --quality=95 public/hero --quality=60 public/thumbs
VichUploader/LiipImagine Integration:
cb_webp filter in Twig:
<picture>
<source srcset="{{ asset(vich_uploader_asset.image) | cb_webp }}" type="image/webp">
<img src="{{ asset(vich_uploader_asset.image) }}" alt="{{ image.name }}">
</picture>
cb_webp filter after the filter name:
{{ 'image.jpg' | liip_imagine_filter('thumbnail') | cb_webp }}
Fallback Handling:
<img> tag inside <picture> for graceful degradation (works even if WebP isn’t supported)..webp files in a separate directory (e.g., public/uploads/webp) and update paths in Twig:
{{ '/uploads/webp/' ~ filename ~ '_q80.webp' | asset_url }}
cb_webp filter output in Twig (if using Symfony’s cache layer) to avoid reprocessing..webp existence before serving (e.g., via Symfony\Component\HttpKernel\EventListener\RewriteListener).File Overwrites:
--force will overwrite existing .webp files. Tip: Use --suffix to version files (e.g., _v2.webp) during updates.var/log/dev.log for skipped files (e.g., unsupported formats or permission issues).Path Handling:
public/uploads). Relative paths may fail silently.realpath() in custom scripts or Laravel’s public_path().Twig Filter Scope:
cb_webp filter assumes the input is a public path (e.g., /images/photo.jpg). Tip: Use asset() for asset paths:
{{ asset('images/photo.jpg') | cb_webp }} {# Works if filter handles asset URLs #}
Quality Trade-offs:
--quality=50) reduces file size but may degrade visual fidelity. Tip: Test with WebPageTest to balance speed vs. quality.--create first to verify file lists:
php bin/console codebuds:webp:convert --debug public/uploads
www-data) has write access to the target directory:
chmod -R 755 public/uploads
// In a custom command extension:
$this->logger->info('Skipped unsupported format: ' . $file);
Custom Filters:
// src/Twig/Extension/WebPExtension.php
public function getFilters()
{
return [
new \Twig\TwigFilter('cb_webp_svg', [$this, 'convertSvgToWebp']),
];
}
Pre/Post-Processing:
kernel.terminate):
# config/services.yaml
App\EventListener\WebPPostProcessListener:
tags:
- { name: kernel.event_listener, event: kernel.terminate, method: onTerminate }
Laravel Integration:
// app/Console/Commands/ConvertWebP.php
use Symfony\Component\Console\Application;
$app = new Application();
$app->add(new \Codebuds\WebPConversionBundle\Command\WebPConvertCommand());
How can I help you explore Laravel packages today?