gtarr / webp-parse-and-convert
Requires
- php: >=5.6
- rosell-dk/webp-convert: >=1.3.9
README
Парсинг HTML страницы и конвертирование изображений в WebP через библиотеку WebP Convert.
Проверка возможности конвертирования в WebP на сервере
var_dump(function_exists('imagewebp')); // bool(true) - можно
Если на сервере нет Imagick
, то конвертирование работать будет, но качество получившегося изображения не будет соответствовать качеству оригинального изображения (установится в 75 для jpg и 85 для png).
Если поддержки нет, то можно воспользоваться данным способом
Установка через Composer
composer require gtarr/webp-parse-and-convert
Установка без Composer
Скачать отсюда и загрузить папку vendor
на сайт
Использование
- По умолчанию
$content = '<html>...<img src="">...</html>'; // HTML страницы $rootDir = $_SERVER['DOCUMENT_ROOT']; // корень сайта require $rootDir . '/vendor/autoload.php'; use WebPParseAndConvert\WebPParseAndConvert; $converter = new WebPParseAndConvert($content); $content = $converter->execute();
- C доп. опциями (в примере представлены значения по умолчанию)
$rootDir = $_SERVER['DOCUMENT_ROOT']; $options = [ "formats" => ['jpg', 'jpeg', 'png'], "patterns" => [ [ 'pattern' => '/<img[^>]+src=("[^"]*")[^>]*>/i', 'exclude' => ['"', './'] ], [ 'pattern' => '/background-image:.+url\(([^"]+)\)/i', 'exclude' => ["'", "./"] ], ], "devices" => ['iphone', 'ipod', 'ipad', 'macintosh', 'mac os', 'Edge', 'MSIE', 'Trident'], "converterOptions" => [], "debug" => false, "useApi" => false, "api" => [] ]; $converter = new WebPParseAndConvert($content, $rootDir, $options);
Опции
Решение проблем
При ошибке PNG file skipped. GD is configured not to convert PNGs
необходимо отключить обработку PNG изображений, для этого нужно в опцию 'formats'
передать только ['jpg', 'jpeg']
.
С версии 0.1.0 это исключение перехватывается
Примеры для CMS
Если нет поддержки WebP на сервере сайта
Можно использовать cоздать на другом сервере, на котором есть поддержка конвертирования в WebP, облачный сервис webp-convert-cloud-service и обращаться к нему по API. Для работы такого варианта необходимо в $options
передать два параметра useApi
и api
:
$options = array( 'useApi' => true, 'api' => array( 'key' => 'some API key', 'url' => 'http://example.com/wpc.php' ) );
Использовать данный способ на постоянной основе на сайте с динамически обновляемой информацией не рекомендуется в виду достаточно долгих операций отправки/получения изображений через cURL.