
php-svg-optimizer -это библиотека PHP, предназначенная для оптимизации файлов SVG путем применения различных преобразований и операций очистки. Библиотека гарантирует, что оптимизированные файлы SVG соответствуют спецификациям SVG 2.0 .
Инструмент стремится как можно больше оптимизировать, не теряя каких -либо данных, которые могут исказить качество изображения, гарантируя, что результирующий SVG остается визуально идентичным оригиналу, одновременно более эффективным с точки зрения размера и производительности.
| Версия | PHP | Документация |
|---|---|---|
| ^5.1 | ^8.3 | текущий |
ext-dom : Требуется расширение PHP для обработки XML.ext-libxml : требуется расширение PHP для обработки ошибок XML.Чтобы установить библиотеку, запустите:
composer require mathiasreker/php-svg-optimizerВы можете использовать эту библиотеку либо в качестве инструмента командной строки (CLI) , либо в качестве автономного пакета .
vendor/bin/svg-optimizer [options] process < path 1> < path 2> ...Options:
-h , --help Display help for the command.
-c , --config Path to a JSON file with custom optimization rules. If not provided, all default optimizations will be applied.
-d , --dry-run Only calculate potential savings without modifying the files.
-q , --quiet Suppress all output except errors.
-v , --version Display the version of the library.
Commands:
Process Provide a list of directories or files to process.vendor/bin/svg-optimizer --dry-run process /path/to/svgs
vendor/bin/svg-optimizer --config=config.json process /path/to/file.svg
vendor/bin/svg-optimizer --quiet process /path/to/file.svg{
"convertColorsToHex" : true ,
"flattenGroups" : true ,
"minifySvgCoordinates" : true ,
"minifyTransformations" : true ,
"removeComments" : true ,
"removeDefaultAttributes" : true ,
"removeDeprecatedAttributes" : true ,
"removeDoctype" : true ,
"removeEnableBackgroundAttribute" : true ,
"removeEmptyAttributes" : true ,
"removeMetadata" : true ,
"removeTitleAndDesc" : true ,
"removeUnnecessaryWhitespace" : true ,
"sortAttributes" : true
}Чтобы обеспечить надежность при использовании библиотеки, крайне важно обрабатывать исключения, так как недопустимые или неверные файлы SVG могут привести к ошибкам времени выполнения. Поймать эти исключения позволит вам изящно управлять потенциальными проблемами и предотвратить сбое вашего приложения.
<?php
declare (strict_types= 1 );
require_once __DIR__ . ' /vendor/autoload.php ' ;
use MathiasReker PhpSvgOptimizer Services SvgOptimizerService ;
try {
$ svgOptimizer = SvgOptimizerService:: fromFile ( ' path/to/source.svg ' )
-> withRules (
convertColorsToHex: true ,
flattenGroups: true ,
minifySvgCoordinates: true ,
minifyTransformations: true ,
removeComments: true ,
removeDefaultAttributes: true ,
removeDeprecatedAttributes: true ,
removeDoctype: true ,
removeEnableBackgroundAttribute: true ,
removeEmptyAttributes: true ,
removeMetadata: true ,
removeTitleAndDesc: false ,
removeUnnecessaryWhitespace: true ,
sortAttributes: true ,
)
-> optimize ()
-> saveToFile ( ' path/to/output.svg ' );
} catch ( Exception $ exception ) {
echo $ exception -> getMessage ();
} <?php
declare (strict_types= 1 );
require_once __DIR__ . ' /vendor/autoload.php ' ;
use MathiasReker PhpSvgOptimizer Services SvgOptimizerService ;
try {
$ svgOptimizer = SvgOptimizerService:: fromFile ( ' path/to/source.svg ' )
-> optimize ()
-> saveToFile ( ' path/to/output.svg ' );
$ metaData = $ svgOptimizer -> getMetaData ();
echo sprintf ( ' Optimized size: %d bytes%s ' , $ metaData -> getOptimizedSize (), PHP_EOL );
echo sprintf ( ' Original size: %d bytes%s ' , $ metaData -> getOriginalSize (), PHP_EOL );
echo sprintf ( ' Size reduction: %d bytes%s ' , $ metaData -> getSavedBytes (), PHP_EOL );
echo sprintf ( ' Reduction percentage: %s %%%s ' , $ metaData -> getSavedPercentage (), PHP_EOL );
} catch ( Exception $ exception ) {
echo $ exception -> getMessage ();
} <?php
declare (strict_types= 1 );
require_once __DIR__ . ' /vendor/autoload.php ' ;
use MathiasReker PhpSvgOptimizer Services SvgOptimizerService ;
try {
$ svgOptimizer = SvgOptimizerService:: fromFile ( ' path/to/source.svg ' )
-> optimize ();
echo sprintf ( ' Get content: ' , $ svgOptimizer -> getContent (), PHP_EOL );
$ metaData = $ svgOptimizer -> getMetaData ();
echo sprintf ( ' Optimized size: %d bytes%s ' , $ metaData -> getOptimizedSize (), PHP_EOL );
echo sprintf ( ' Original size: %d bytes%s ' , $ metaData -> getOriginalSize (), PHP_EOL );
echo sprintf ( ' Size reduction: %d bytes%s ' , $ metaData -> getSavedBytes (), PHP_EOL );
echo sprintf ( ' Reduction percentage: %s %%%s ' , $ metaData -> getSavedPercentage (), PHP_EOL );
} catch ( Exception $ exception ) {
echo $ exception -> getMessage ();
} <?php
declare (strict_types= 1 );
require_once __DIR__ . ' /vendor/autoload.php ' ;
use MathiasReker PhpSvgOptimizer Services SvgOptimizerService ;
try {
$ svgOptimizer = SvgOptimizerService:: fromString ( ' <svg>...</svg> ' )
-> optimize ();
echo sprintf ( ' Content: ' , $ svgOptimizer -> getContent (), PHP_EOL );
$ metaData = $ svgOptimizer -> getMetaData ();
echo sprintf ( ' Optimized size: %d bytes%s ' , $ metaData -> getOptimizedSize (), PHP_EOL );
echo sprintf ( ' Original size: %d bytes%s ' , $ metaData -> getOriginalSize (), PHP_EOL );
echo sprintf ( ' Size reduction: %d bytes%s ' , $ metaData -> getSavedBytes (), PHP_EOL );
echo sprintf ( ' Reduction percentage: %s %%%s ' , $ metaData -> getSavedPercentage (), PHP_EOL );
} catch ( Exception $ exception ) {
echo $ exception -> getMessage ();
} Статический фабричный метод для создания SvgOptimizerService из пути файла.
$ svgOptimizer = SvgOptimizerService:: fromFile ( ' path/to/source.svg ' ); Статический фабричный метод для создания SvgOptimizerService из строки.
$ svgOptimizer = SvgOptimizerService:: fromString ( ' <svg>...</svg> ' );withRulesНастройте, какие правила оптимизации SVG применить. Метод принимает логические параметры, которые определяют, должны ли конкретные правила быть включены или отключены.
Удаляет <title> и <desc> теги из SVG:
$ svgOptimizer -> withRules (removeTitleAndDesc: true );Удаляет все комментарии из SVG:
$ svgOptimizer -> withRules (removeComments: true );Очищает ненужные пробелы в SVG:
$ svgOptimizer -> withRules (removeUnnecessaryWhitespace: true );Сортирует атрибуты в каждом элементе:
$ svgOptimizer -> withRules (sortAttributes: true );Удаляет значения атрибута по умолчанию, которые соответствуют общим значениям по умолчанию:
$ svgOptimizer -> withRules (removeDefaultAttributes: true );Удаляет устаревшие атрибуты из SVG:
$ svgOptimizer -> withRules (removeDeprecatedAttributes: true ); Удаляет <metadata> теги из SVG:
$ svgOptimizer -> withRules (removeMetadata: true ); Платает вложенные элементы <g> , перемещая их детские элементы в родительский узел:
$ svgOptimizer -> withRules (flattenGroups: true ); Преобразует значения цвета rgb() в шестнадцатеричный формат:
$ svgOptimizer -> withRules (convertColorsToHex: true );Минифирует значения координат, удаляя ненужную точность:
$ svgOptimizer -> withRules (minifySvgCoordinates: true );Минифирует атрибуты преобразования, удаляя избыточные значения:
$ svgOptimizer -> withRules (minifyTransformations: true );Удаляет декларацию Doctype SVG:
$ svgOptimizer -> withRules (removeDoctype: true ); Удаляет атрибут enable-background из SVG:
$ svgOptimizer -> withRules (removeEnableBackgroundAttribute: true );Удаляет пустые атрибуты из SVG:
$ svgOptimizer -> withRules (removeEmptyAttributes: true );Все параметры установлены на TRUE по умолчанию. Вы можете настроить их индивидуально, передавая желаемые значения:
$ svgOptimizer -> withRules (
convertColorsToHex: true ,
flattenGroups: true ,
minifySvgCoordinates: true ,
minifyTransformations: true ,
removeComments: true ,
removeDefaultAttributes: true ,
removeDeprecatedAttributes: true ,
removeDoctype: true ,
removeEmptyAttributes: true ,
removeMetadata: true ,
removeTitleAndDesc: true ,
removeUnnecessaryWhitespace: true ,
sortAttributes: true ,
);optimize методЗаработает процесс оптимизации и генерирует оптимизированный файл SVG.
$ svgOptimizer -> optimize ();saveToFile MethodСохраняет оптимизированный файл SVG в указанный путь.
$ svgOptimizer -> saveToFile ( ' path/to/output.svg ' );getContentВозвращает оптимизированный контент SVG.
$ svgOptimizer -> getContent ();getOptimizedSize МетодВозвращает размер оптимизированного файла SVG.
$ svgOptimizer -> getMetaData ()-> getOptimizedSize ();getOriginalSizeВозвращает размер исходного файла SVG.
$ svgOptimizer -> getMetaData ()-> getOriginalSize ();getSavedBytesВозвращает количество байтов, сохраненных процессом оптимизации.
$ svgOptimizer -> getMetaData ()-> getSavedBytes ();getSavedPercentageВозвращает процент байтов, сохраненных процессом оптимизации.
$ svgOptimizer -> getMetaData ()-> getSavedPercentage ();Полный список предлагаемых функций и известных проблем см. В открытых вопросах.
Мы приветствуем все вклад! Если у вас есть идеи для улучшений, не стесняйтесь раскошелиться на репозиторий и отправлять запрос на привлечение. Вы также можете открыть проблему. Если вы найдете этот проект полезным, не забудьте дать ему звезду!
Библиотека реализует схему стратегии, где стратегии инкапсулируются как «правила», расположенные в каталоге /src/Services/Rules .
Создайте правило :
Реализуйте SvgOptimizerRuleInterface , добавив новый класс в каталоге /src/Services/Rules .
Напишите тесты :
Разработайте комплексные тестовые случаи для вашего правила в каталоге /tests/Services/Rules чтобы гарантировать, что оно ведет себя так, как ожидалось.
Интегрировать правило :
/src/Services/SvgOptimizerService.php ./src/Commands/SvgOptimizerCommand.php svgoptimizercommand.php. Обновление документации :
Документируйте функциональность и цель вашего правила в README.md .
Следуя этим шагам гарантировать, что ваше правило легко интегрировано в проект.
Чтобы использовать проект с Docker, вы можете запустить контейнер, используя:
docker-compose up -dЗатем получить доступ к контейнеру:
docker exec -it php-svg-optimizer bashЗапустить Phpstan:
composer phpstanЗапустите тесты:
composer testКод формата:
composer formatЭтот проект лицензирован по лицензии MIT. См. Файл лицензии для получения дополнительной информации.
Хотя инструмент был тщательно протестирован и построен таким образом, чтобы избежать рискованных изменений, его использование на вашем собственном риске. Мы не можем гарантировать, что он будет полностью совместим со всеми файлами SVG или рабочими процессами. Настоятельно рекомендуется протестировать инструмент с помощью образцов файлов SVG и обеспечить совместимость с вашим конкретным вариантом использования, прежде чем использовать его в производственной среде.