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);
Опции
Опция | Тип | Описание |
---|---|---|
'formats' | Array | Форматы изображений, которые будут найдены на странице и конвертированы в webp |
'patterns' | Array | Регулярные выражения, по которым будет производиться поиск, имеет 2 параметра: |
'patterns' => [['pattern' => '...']] | String | 1. Само регулярное выражение |
'patterns' => [['exclude' => []]] | Array | 2. Подстроки, которые нужно исключить из обработки после нахождения строки по регулярному выражению, например, кавычки. В исключение также автоматически добавляется адрес сайта с протоколом для обработки абсолютных путей изображений. |
'devices' | Array | Список устройств, для которых по User-agent будут выводиться оригинальные изображения в форматах jpg, jpeg, png |
'converterOptions' | Array | Опции, передаваемые в вызов WebPConvert::convert() библиотеки WebP Convert |
'debug' | Boolean | Использование встроенного логгера библиотеки WebP Convert |
'useApi' | Boolean | Использования для конвертирования внешнего сервиса основанного на webp-convert-cloud-service |
'api' | Array | Параметры для подключения к внешнему сервису |
'api' => ['key' => '...'] | String | API ключ внешнего облачного сервиса |
'api' => ['url' => '...'] | String | URL внешнего облачного сервиса |
Решение проблем
При ошибке 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.