
php-svg-optimizer est une bibliothèque PHP conçue pour optimiser les fichiers SVG en appliquant diverses transformations et opérations de nettoyage. La bibliothèque garantit que les fichiers SVG optimisés sont conformes aux spécifications SVG 2.0 .
L'outil s'efforce d'optimiser autant que possible sans perdre de données qui pourraient déformer la qualité de l'image, garantissant que le SVG résultant reste visuellement identique à l'original tout en étant plus efficace en termes de taille et de performances.
| Version | Php | Documentation |
|---|---|---|
| ^ 5.1 | ^ 8.3 | actuel |
ext-dom : Extension PHP requise pour la manipulation XML.ext-libxml : Extension PHP requise pour la gestion des erreurs XML.Pour installer la bibliothèque, exécutez:
composer require mathiasreker/php-svg-optimizerVous pouvez utiliser cette bibliothèque comme un outil de ligne de commande (CLI) ou comme un package autonome .
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
}Pour garantir la robustesse lors de l'utilisation de la bibliothèque, il est crucial de gérer les exceptions, car les fichiers SVG non valides ou mal formés pourraient conduire à des erreurs d'exécution. La capture de ces exceptions vous permettra de gérer gracieusement les problèmes potentiels et d'empêcher votre application de s'écraser.
<?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 ();
} Méthode d'usine statique pour créer SvgOptimizerService à partir d'un chemin de fichier.
$ svgOptimizer = SvgOptimizerService:: fromFile ( ' path/to/source.svg ' ); Méthode d'usine statique pour créer SvgOptimizerService à partir d'une chaîne.
$ svgOptimizer = SvgOptimizerService:: fromString ( ' <svg>...</svg> ' );withRulesConfigurez les règles d'optimisation SVG à appliquer. La méthode accepte les paramètres booléens qui déterminent si des règles spécifiques doivent être activées ou désactivées.
Supprime les balises <title> et <desc> du SVG:
$ svgOptimizer -> withRules (removeTitleAndDesc: true );Supprime tous les commentaires du SVG:
$ svgOptimizer -> withRules (removeComments: true );Nettoyez un espace blanc inutile dans le SVG:
$ svgOptimizer -> withRules (removeUnnecessaryWhitespace: true );Trie les attributs dans chaque élément:
$ svgOptimizer -> withRules (sortAttributes: true );Supprime les valeurs d'attribut par défaut qui correspondent aux paramètres par défaut courants:
$ svgOptimizer -> withRules (removeDefaultAttributes: true );Supprime les attributs obsolètes du SVG:
$ svgOptimizer -> withRules (removeDeprecatedAttributes: true ); Supprime les balises <metadata> du SVG:
$ svgOptimizer -> withRules (removeMetadata: true ); Flattens Elements Nested <g> , déplaçant leurs éléments enfants vers le nœud parent:
$ svgOptimizer -> withRules (flattenGroups: true ); Convertit les valeurs de couleur rgb() en format hexadécimal:
$ svgOptimizer -> withRules (convertColorsToHex: true );Minifie les valeurs de coordonnées en supprimant la précision inutile:
$ svgOptimizer -> withRules (minifySvgCoordinates: true );Minifie les attributs de transformation en supprimant les valeurs redondantes:
$ svgOptimizer -> withRules (minifyTransformations: true );Supprime la déclaration Doctype SVG:
$ svgOptimizer -> withRules (removeDoctype: true ); Supprime l'attribut enable-background du SVG:
$ svgOptimizer -> withRules (removeEnableBackgroundAttribute: true );Supprime les attributs vides du SVG:
$ svgOptimizer -> withRules (removeEmptyAttributes: true );Toutes les options sont définies sur true par défaut. Vous pouvez les configurer individuellement en lui faisant passer les valeurs souhaitées:
$ 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 la méthodeFinalise le processus d'optimisation et génère le fichier SVG optimisé.
$ svgOptimizer -> optimize ();saveToFileEnregistre le fichier SVG optimisé sur le chemin spécifié.
$ svgOptimizer -> saveToFile ( ' path/to/output.svg ' );getContentRenvoie le contenu SVG optimisé.
$ svgOptimizer -> getContent ();getOptimizedSizeRenvoie la taille du fichier SVG optimisé.
$ svgOptimizer -> getMetaData ()-> getOptimizedSize ();getOriginalSizeRenvoie la taille du fichier SVG d'origine.
$ svgOptimizer -> getMetaData ()-> getOriginalSize ();getSavedBytesRenvoie le nombre d'octets enregistrés par le processus d'optimisation.
$ svgOptimizer -> getMetaData ()-> getSavedBytes ();getSavedPercentageRenvoie le pourcentage d'octets enregistrés par le processus d'optimisation.
$ svgOptimizer -> getMetaData ()-> getSavedPercentage ();Pour une liste complète des fonctionnalités proposées et des problèmes connus, consultez les problèmes ouverts.
Nous accueillons toutes les contributions! Si vous avez des idées d'améliorations, n'hésitez pas à alimenter le référentiel et à soumettre une demande de traction. Vous pouvez également ouvrir un problème. Si vous trouvez ce projet utile, n'oubliez pas de lui donner une étoile!
La bibliothèque met en œuvre le modèle de stratégie, où les stratégies sont encapsulées sous forme de «règles» situées dans le répertoire /src/Services/Rules .
Créez la règle :
Implémentez le SvgOptimizerRuleInterface en ajoutant une nouvelle classe dans le répertoire /src/Services/Rules .
Tests d'écriture :
Développer des cas de test complets pour votre règle dans le répertoire /tests/Services/Rules pour s'assurer qu'il se comporte comme prévu.
Intégrer la règle :
/src/Services/SvgOptimizerService.php ./src/Commands/SvgOptimizerCommand.php . Mettre à jour la documentation :
Documentez la fonctionnalité et le but de votre règle dans le README.md .
Suivre ces étapes garantit que votre règle est parfaitement intégrée au projet.
Pour utiliser le projet avec Docker, vous pouvez démarrer le conteneur en utilisant:
docker-compose up -dEnsuite, accédez au conteneur:
docker exec -it php-svg-optimizer bashExécutez Phpstan:
composer phpstanExécutez des tests:
composer testCode de format:
composer formatCe projet est autorisé sous la licence du MIT. Voir le fichier de licence pour plus d'informations.
Bien que l'outil ait été soigneusement testé et soit construit d'une manière qui évite les changements risqués, son utilisation est à vos propres risques. Nous ne pouvons garantir qu'il sera entièrement compatible avec tous les fichiers SVG ou les workflows. Il est fortement recommandé de tester l'outil avec des exemples de fichiers SVG et d'assurer la compatibilité avec votre cas d'utilisation spécifique avant de l'utiliser dans un environnement de production.