
php-svg-optimizerさまざまな変換とクリーンアップ操作を適用してSVGファイルを最適化するように設計されたPHPライブラリです。ライブラリは、最適化されたSVGファイルがSVG 2.0仕様に準拠していることを保証します。
このツールは、画像の品質をゆがめる可能性のあるデータを失うことなく、可能な限り最適化するよう努めており、結果のSVGは、サイズとパフォーマンスの点でより効率的である一方で、オリジナルと視覚的に同一のままであることを保証します。
| バージョン | Php | ドキュメント |
|---|---|---|
| ^5.1 | ^8.3 | 現在 |
ext-dom :XML処理に必要なPHP拡張機能。ext-libxml :XMLエラー処理に必要なPHP拡張機能。ライブラリをインストールするには、実行してください。
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最適化ルールを構成します。このメソッドは、特定のルールを有効にするか無効にする必要があるかを決定するブールパラメーターを受け入れます。
svgから<title>および<desc>タグを削除します。
$ 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 ); SVGから<metadata>タグを削除します。
$ svgOptimizer -> withRules (removeMetadata: true );ネストされた<g>要素を平らにし、子供の要素を親ノードに移動します。
$ svgOptimizer -> withRules (flattenGroups: true ); rgb()色の値を16進形式に変換します。
$ svgOptimizer -> withRules (convertColorsToHex: true );不必要な精度を削除することにより、座標値を最小化します。
$ svgOptimizer -> withRules (minifySvgCoordinates: true );冗長な値を削除することにより、変換属性を最小化します。
$ svgOptimizer -> withRules (minifyTransformations: true );SVG Doctype宣言を削除します:
$ svgOptimizer -> withRules (removeDoctype: true ); SVGからenable-background属性を削除します。
$ 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メソッド最適化された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ディレクトリにある「ルール」として戦略がカプセル化される戦略パターンを実装します。
ルールを作成します:
/src/Services/Rulesディレクトリに新しいクラスを追加して、 SvgOptimizerRuleInterface実装します。
テストを書く:
/tests/Services/Rulesディレクトリでルールの包括的なテストケースを作成して、予想どおりに動作するようにします。
ルールを統合します。
/src/Services/SvgOptimizerService.phpにあるビルダーに新しいルールを登録します。/src/Commands/SvgOptimizerCommand.phpを更新して、CLIツール用に構成します。ドキュメントの更新:
README.mdにルールの機能と目的を文書化します。
これらの手順に従って、ルールがプロジェクトにシームレスに統合されます。
Dockerでプロジェクトを使用するには、以下を使用してコンテナを開始できます。
docker-compose up -d次に、コンテナにアクセスします。
docker exec -it php-svg-optimizer bashphpstanを実行:
composer phpstanテストの実行:
composer testフォーマットコード:
composer formatこのプロジェクトは、MITライセンスの下でライセンスされています。詳細については、ライセンスファイルを参照してください。
このツールは徹底的にテストされており、危険な変化を回避する方法で構築されていますが、その使用はお客様の責任にあります。すべてのSVGファイルまたはワークフローと完全に互換性があることを保証することはできません。サンプルSVGファイルでツールをテストし、生産環境で使用する前に特定のユースケースとの互換性を確保することを強くお勧めします。