Convert JPEG & PNG to WebP with PHP
This library enables you to do webp conversion with PHP. It supports an abundance of methods for converting and automatically selects the most capable of these that is available on the system.
The library can convert using the following methods:
- cwebp (executing cwebp binary using an
- vips (using Vips PHP extension)
- imagick (using Imagick PHP extension)
- gmagick (using Gmagick PHP extension)
- imagemagick (executing imagemagick binary using an
- graphicsmagick (executing graphicsmagick binary using an
- wpc (using WebPConvert Cloud Service - an open source webp converter for PHP - based on this library)
- ewwww (using the ewww cloud converter (1 USD startup and then free webp conversion))
- gd (using the Gd PHP extension)
In addition to converting, the library also has a method for serving converted images, and we have instructions here on how to set up a solution for automatically serving webp images to browsers that supports webp.
Require the library with Composer, like this:
composer require rosell-dk/webp-convert
Here is a minimal example of converting using the WebPConvert::convert method:
<?php // Initialise your autoloader (this example is using Composer) require 'vendor/autoload.php'; use WebPConvert\WebPConvert; $source = __DIR__ . '/logo.jpg'; $destination = $source . '.webp'; $options = ; WebPConvert::convert($source, $destination, $options);
The WebPConvert::convert method comes with a bunch of options. The following introduction is a must-read: docs/v2.0/converting/introduction-for-converting.md.
If you are migrating from 1.3.9, read this
Serving converted images
The WebPConvert::serveConverted method tries to serve a converted image. If there already is an image at the destination, it will take that, unless the original is newer or smaller. If the method cannot serve a converted image, it will serve original image, a 404, or whatever the 'fail' option is set to. It also adds X-WebP-Convert-Log headers, which provides insight into what happened.
Example (version 2.0):
<?php require 'vendor/autoload.php'; use WebPConvert\WebPConvert; $source = __DIR__ . '/logo.jpg'; $destination = $source . '.webp'; WebPConvert::serveConverted($source, $destination, [ 'fail' => 'original', // If failure, serve the original image (source). Other options include 'throw', '404' and 'report' //'show-report' => true, // Generates a report instead of serving an image 'serve-image' => [ 'headers' => [ 'cache-control' => true, 'vary-accept' => true, // other headers can be toggled... ], 'cache-control-header' => 'max-age=2', ], 'convert' => [ // all convert option can be entered here (ie "quality") ], ]);
The following introduction is a must-read (for 2.0): docs/v2.0/serving/introduction-for-serving.md.
The old introduction (for 1.3.9) is available here: docs/v1.3/serving/convert-and-serve.md
WebP on demand
The library can be used to create a WebP On Demand solution, which automatically serves WebP images instead of jpeg/pngs for browsers that supports WebP. To set this up, follow what's described in this tutorial (not updated for 2.0 yet).
WebP Convert in the wild
WebP Convert is used in the following projects:
A cloud service based on WebPConvert
Kirby CMS integration
Supporting WebP Convert
Bread on the table don't come for free, even though this library does, and always will. I enjoy developing this, and supporting you guys, but I kind of need the bread too. Please make it possible for me to have both: