🔥 If you update from a previous version to 2.0 you have to save the configuration again once!
Adds an automagically created WebP copy for every processed jpg/jpeg/png image in the format
original.ext.webp
WebP is a modern image format that provides superior lossless and lossy compression for images on the web. Using WebP, webmasters and web developers can create smaller, richer images that make the web faster.
WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller than comparable JPEG images at equivalent SSIM quality index.
Lossless WebP supports transparency (also known as alpha channel) at a cost of just 22% additional bytes. For cases when lossy RGB compression is acceptable, lossy WebP also supports transparency, typically providing 3× smaller file sizes compared to PNG.
— source: https://developers.google.com/speed/webp/
Add via composer:
composer require "plan2net/webp"
- Install and activate the extension in the Extension manager
- Flush TYPO3 and PHP Cache
- Clear the processed files in the Install Tool or Maintenance module
You can either use the installed Imagemagick or GraphicsMagick you already use for TYPO3 image manipulation if it supports webp (see below) or you can use any other external binary available on your server (e.g. cwebp).
You can test the support of GraphicsMagick with e.g.:
gm version | grep WebP
(should return yes
)
or using ImageMagick with e.g.:
convert version | grep webp
(should return a list of supported formats including webp
)
These are examples, check your system documentation for further information on how to verify webp support on your platform.
You can set parameters for the conversion in the extension configuration.
parameters = image/jpeg:-quality 85 -define webp:lossless=false|image/png:-quality 15 -define webp:lossless=true
You find a list of possible options here:
https://www.imagemagick.org/script/webp.php http://www.graphicsmagick.org/GraphicsMagick.html
If you want to use an external binary, you have to supply an option string with exactly two %s
placeholders for the original file and the target file name.
E.g.:
image/jpeg::/usr/bin/cwebp -jpeg_like %s -o %s|image/png::/usr/bin/cwebp -lossless %s -o %s
https://developers.google.com/speed/webp/docs/cwebp
Warning
Try to set a higher value for quality
first if the image does not fit your expectations,
before trying to use webp:lossless=true
, as this could even lead to a
higher filesize than the original!
# cat=basic; type=boolean; label=Convert all images in local and writable storage and save a copy in Webp format; disable to convert images in the _processed_ folder only
convert_all = 1
Since version 1.1.0
all images in every local and writable storage will be saved as a copy in Webp format by default (instead of just images modified by TYPO3 in the storage's processed folder). If you want to revert to the previous behaviour, set this flag to false
(disable the checkbox).
Please adapt the following to your specific needs, this is only an example configuration.
Add a map directive in your global nginx configuration:
map $http_accept $webp_suffix {
default "";
"~*webp" ".webp";
}
and add these rules to your server
configuration:
location ~* ^/fileadmin/.+\.(?i)(png|jpe?g)$ {
add_header Vary Accept;
try_files $uri$webp_suffix $uri =404;
}
location ~* ^/other-storage/.+\.(?i)(png|jpe?g)$ {
add_header Vary Accept;
try_files $uri$webp_suffix $uri =404;
}
Make sure that there are no other rules that already apply to the specified image formats and prevent further execution!
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.$2.webp -f
RewriteRule ^(fileadmin/.+)\.(?i)(png|jpe?g)$ $1.$2.webp [T=image/webp,E=accept:1]
RewriteRule ^(other-storage/.+)\.(?i)(png|jpe?g)$ $1.$2.webp [T=image/webp,E=accept:1]
</IfModule>
<IfModule mod_headers.c>
Header append Vary Accept env=REDIRECT_accept
</IfModule>
AddType image/webp .webp
Make sure that there are no other rules that already apply to the specified image formats and prevent further execution!
If something does not work as expected take a look at the log file.
Every problem is logged to the TYPO3 log (since version 2.0), normally found in var/log/typo3_*.log
Converted files that are larger than the original are removed automatically (since version 2.1.0) and the conversion will not be retried with the same configuration.
You can remove the created .webp files at any time within the TYPO3 CMS backend.
- Go to System > Install > Clean up
- Click the Clear processed files button
- Go to Admin Tools > Remove Temporary Assets
- Click the Scan temporary files button
- In the modal click the button with the path of the storage
Although the button names only the path of the _processed_
folder, all processed files of the storage are actually deleted!
You can get an equal result with using the Apache mod_pagespeed or nginx ngx_pagespeed modules from Google https://developers.google.com/speed/pagespeed/module/ with a configuration like:
pagespeed EnableFilters convert_jpeg_to_webp;
pagespeed EnableFilters convert_to_webp_lossless;
but that requires more knowledge to set up.
Note that this extension produces an additional load on your server (each processed image is reprocessed) and possibly creates a lot of additional files that consume disk space (size varies depending on your! configuration).
This extension was inspired by Angela Dudtkowski's cs_webp extension that has some flaws and got no update since early 2017. Thanks Angela :-)
Release | Changes |
---|---|
1.1.0 | Convert all images in every local and writable storage Fix fallback options for conversion Update README |
1.2.0 | Add options for different conversion parameters per image mimetype |
2.0.0 | Cleanup, optimization and bugfixes. |
Added logging. | |
🔥 Renamed configuration options. Save the configuration again once! | |
2.1.0 | Converted files larger than the original are removed and conversion will not be retried with the same configuration |
Send us a postcard from your favourite place and tell us how much you love TYPO3 and OpenSource:
plan2net GmbH, Sieveringerstraße 37, 1190 Vienna, Austria