
php-svg-optimizer ist eine PHP-Bibliothek, mit der SVG-Dateien optimiert werden sollen, indem verschiedene Transformationen und Reinigungsvorgänge angewendet werden. Die Bibliothek stellt sicher, dass die optimierten SVG -Dateien den SVG 2.0 -Spezifikationen entsprechen .
Das Tool ist bestrebt, so weit wie möglich zu optimieren, ohne Daten zu verlieren, die die Qualität des Bildes verzerren könnten, und sicherzustellen, dass die resultierende SVG optisch mit dem Original identisch bleibt und gleichzeitig Größe und Leistung effizienter ist.
| Version | Php | Dokumentation |
|---|---|---|
| ^5.1 | ^8.3 | aktuell |
ext-dom : Erforderliche PHP-Erweiterung für das XML-Handling.ext-libxml : Erforderliche PHP-Erweiterung für die XML-Fehlerbehandlung.Um die Bibliothek zu installieren, führen Sie aus:
composer require mathiasreker/php-svg-optimizerSie können diese Bibliothek entweder als Befehlszeilen-Tool (CLI) oder als eigenständiges Paket verwenden.
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
}Um bei der Verwendung der Bibliothek Robustheit zu gewährleisten, ist es wichtig, Ausnahmen zu verarbeiten, da ungültige oder missgebildete SVG -Dateien zu Laufzeitfehlern führen können. Wenn Sie diese Ausnahmen aufrufen, können Sie potenzielle Probleme anmutig verwalten und verhindern, dass Ihre Anwendung abstürzt.
<?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 ();
} Statische Fabrikmethode zum Erstellen von SvgOptimizerService aus einem Dateipfad.
$ svgOptimizer = SvgOptimizerService:: fromFile ( ' path/to/source.svg ' ); Statische Fabrikmethode zum Erstellen von SvgOptimizerService aus einer Zeichenfolge.
$ svgOptimizer = SvgOptimizerService:: fromString ( ' <svg>...</svg> ' );withRules -MethodeKonfigurieren Sie, welche SVG -Optimierungsregeln angewendet werden sollen. Die Methode akzeptiert die Booleschen Parameter, die feststellen, ob bestimmte Regeln aktiviert oder deaktiviert werden sollen.
Entfernt <title> und <desc> Tags aus dem SVG:
$ svgOptimizer -> withRules (removeTitleAndDesc: true );Entfernt alle Kommentare aus dem SVG:
$ svgOptimizer -> withRules (removeComments: true );Reinigt unnötige Whitespace im SVG:
$ svgOptimizer -> withRules (removeUnnecessaryWhitespace: true );Sortiert Attribute in jedem Element:
$ svgOptimizer -> withRules (sortAttributes: true );Entfernt Standardattributwerte, die gemeinsame Standardeinstellungen übereinstimmen:
$ svgOptimizer -> withRules (removeDefaultAttributes: true );Entfernt veraltete Attribute aus dem SVG:
$ svgOptimizer -> withRules (removeDeprecatedAttributes: true ); Entfernt <metadata> Tags aus dem SVG:
$ svgOptimizer -> withRules (removeMetadata: true ); Flachen verschachtelte <g> Elemente und verschieben ihre Kinderelemente auf den übergeordneten Knoten:
$ svgOptimizer -> withRules (flattenGroups: true ); Konvertiert rgb() Farbwerte in das hexadezimale Format:
$ svgOptimizer -> withRules (convertColorsToHex: true );Minder Sie die Koordinatenwerte, indem Sie unnötige Genauigkeit beseitigen:
$ svgOptimizer -> withRules (minifySvgCoordinates: true );Mindert Transformationsattribute, indem redundante Werte entfernt werden:
$ svgOptimizer -> withRules (minifyTransformations: true );Entfernt die SVG -DocType -Erklärung:
$ svgOptimizer -> withRules (removeDoctype: true ); Entfernt das Attribut enable-background aus dem SVG:
$ svgOptimizer -> withRules (removeEnableBackgroundAttribute: true );Entfernt leere Attribute aus dem SVG:
$ svgOptimizer -> withRules (removeEmptyAttributes: true );Alle Optionen werden standardmäßig auf True eingestellt. Sie können sie einzeln konfigurieren, indem Sie die gewünschten Werte an sie weitergeben:
$ 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 ,
);optimizeFüllt den Optimierungsprozess ab und generiert die optimierte SVG -Datei.
$ svgOptimizer -> optimize ();saveToFile -MethodeSpeichert die optimierte SVG -Datei auf dem angegebenen Pfad.
$ svgOptimizer -> saveToFile ( ' path/to/output.svg ' );getContent -MethodeGibt den optimierten SVG -Inhalt zurück.
$ svgOptimizer -> getContent ();getOptimizedSizeGibt die Größe der optimierten SVG -Datei zurück.
$ svgOptimizer -> getMetaData ()-> getOptimizedSize ();getOriginalSize -MethodeGibt die Größe der ursprünglichen SVG -Datei zurück.
$ svgOptimizer -> getMetaData ()-> getOriginalSize ();getSavedBytes -MethodeGibt die Anzahl der durch den Optimierungsprozess gespeicherten Bytes zurück.
$ svgOptimizer -> getMetaData ()-> getSavedBytes ();getSavedPercentage -MethodeGibt den Prozentsatz der durch den Optimierungsprozess gespeicherten Bytes zurück.
$ svgOptimizer -> getMetaData ()-> getSavedPercentage ();Eine vollständige Liste der vorgeschlagenen Merkmale und bekannten Probleme finden Sie in den offenen Problemen.
Wir begrüßen alle Beiträge! Wenn Sie Ideen für Verbesserungen haben, können Sie das Repository freigeben und eine Pull -Anfrage einreichen. Sie können auch ein Problem eröffnen. Wenn Sie dieses Projekt hilfreich finden, vergessen Sie nicht, es einen Stern zu geben!
Die Bibliothek implementiert das Strategiemuster, bei dem Strategien als "Regeln" im Verzeichnis /src/Services/Rules .
Erstellen Sie die Regel :
Implementieren Sie das SvgOptimizerRuleInterface , indem Sie eine neue Klasse im Verzeichnis /src/Services/Rules hinzufügen.
Tests schreiben :
Entwickeln Sie umfassende Testfälle für Ihre Regel im Verzeichnis /tests/Services/Rules um sicherzustellen, dass es sich wie erwartet verhält.
Integrieren Sie die Regel :
/src/Services/SvgOptimizerService.php ./src/Commands/SvgOptimizerCommand.php aktualisieren. Dokumentation aktualisieren :
Dokumentieren Sie die Funktionen und den Zweck Ihrer Regel in der README.md .
Das Befolgen dieser Schritte stellt sicher, dass Ihre Regel nahtlos in das Projekt integriert ist.
Um das Projekt mit Docker zu verwenden, können Sie den Container mit:
docker-compose up -dGreifen Sie dann auf den Container zu:
docker exec -it php-svg-optimizer bashPhpstan ausführen:
composer phpstanTests ausführen:
composer testFormatcode:
composer formatDieses Projekt ist unter der MIT -Lizenz lizenziert. Weitere Informationen finden Sie in der Lizenzdatei.
Obwohl das Tool gründlich getestet wurde und auf eine Weise gebaut wurde, die riskante Änderungen vermeidet, ist die Verwendung auf eigenes Risiko. Wir können nicht garantieren, dass es mit allen SVG -Dateien oder Workflows vollständig kompatibel ist. Es wird dringend empfohlen, das Tool mit Beispiel -SVG -Dateien zu testen und die Kompatibilität mit Ihrem spezifischen Anwendungsfall zu gewährleisten, bevor es in einer Produktionsumgebung verwendet wird.