
php-svg-optimizer adalah pustaka PHP yang dirancang untuk mengoptimalkan file SVG dengan menerapkan berbagai transformasi dan operasi pembersihan. Perpustakaan memastikan bahwa file SVG yang dioptimalkan sesuai dengan spesifikasi SVG 2.0 .
Alat ini berusaha untuk mengoptimalkan sebanyak mungkin tanpa kehilangan data yang dapat mengubah kualitas gambar, memastikan SVG yang dihasilkan tetap identik secara visual dengan aslinya sambil lebih efisien dalam hal ukuran dan kinerja.
| Versi | Php | Dokumentasi |
|---|---|---|
| ^5.1 | ^8.3 | saat ini |
ext-dom : Diperlukan ekstensi PHP untuk penanganan XML.ext-libxml : Ekstensi PHP yang diperlukan untuk penanganan kesalahan XML.Untuk menginstal perpustakaan, jalankan:
composer require mathiasreker/php-svg-optimizerAnda dapat menggunakan pustaka ini sebagai alat baris perintah (CLI) atau sebagai paket mandiri .
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
}Untuk memastikan ketahanan saat menggunakan perpustakaan, penting untuk menangani pengecualian, karena file SVG yang tidak valid atau cacat dapat menyebabkan kesalahan runtime. Menangkap pengecualian ini akan memungkinkan Anda untuk mengelola masalah potensial dengan anggun dan mencegah aplikasi Anda mogok.
<?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 ();
} Metode pabrik statis untuk membuat SvgOptimizerService dari jalur file.
$ svgOptimizer = SvgOptimizerService:: fromFile ( ' path/to/source.svg ' ); Metode pabrik statis untuk membuat SvgOptimizerService dari string.
$ svgOptimizer = SvgOptimizerService:: fromString ( ' <svg>...</svg> ' );withRulesKonfigurasikan aturan optimisasi SVG mana yang akan diterapkan. Metode ini menerima parameter boolean yang menentukan apakah aturan spesifik harus diaktifkan atau dinonaktifkan.
Menghapus tag <title> dan <desc> dari SVG:
$ svgOptimizer -> withRules (removeTitleAndDesc: true );Menghapus semua komentar dari SVG:
$ svgOptimizer -> withRules (removeComments: true );Membersihkan Whitespace yang tidak perlu di SVG:
$ svgOptimizer -> withRules (removeUnnecessaryWhitespace: true );Sortir atribut dalam setiap elemen:
$ svgOptimizer -> withRules (sortAttributes: true );Menghapus nilai atribut default yang cocok dengan default umum:
$ svgOptimizer -> withRules (removeDefaultAttributes: true );Menghapus atribut yang sudah usang dari SVG:
$ svgOptimizer -> withRules (removeDeprecatedAttributes: true ); Menghapus tag <metadata> dari SVG:
$ svgOptimizer -> withRules (removeMetadata: true ); Flattens bersarang <g> elemen, memindahkan elemen anak mereka ke simpul induk:
$ svgOptimizer -> withRules (flattenGroups: true ); Konversi nilai warna rgb() ke format heksadesimal:
$ svgOptimizer -> withRules (convertColorsToHex: true );Mempertahankan nilai koordinat dengan menghilangkan ketepatan yang tidak perlu:
$ svgOptimizer -> withRules (minifySvgCoordinates: true );Mempertahankan atribut transformasi dengan menghapus nilai yang berlebihan:
$ svgOptimizer -> withRules (minifyTransformations: true );Menghapus Deklarasi SVG Doctype:
$ svgOptimizer -> withRules (removeDoctype: true ); Menghapus atribut enable-background dari SVG:
$ svgOptimizer -> withRules (removeEnableBackgroundAttribute: true );Menghapus atribut kosong dari SVG:
$ svgOptimizer -> withRules (removeEmptyAttributes: true );Semua opsi diatur ke true secara default. Anda dapat mengonfigurasinya secara individual dengan memberikan nilai yang diinginkan ke dalamnya:
$ 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 metodeMenyelesaikan proses optimasi dan menghasilkan file SVG yang dioptimalkan.
$ svgOptimizer -> optimize ();saveToFileMenyimpan file SVG yang dioptimalkan ke jalur yang ditentukan.
$ svgOptimizer -> saveToFile ( ' path/to/output.svg ' );getContentMengembalikan konten SVG yang dioptimalkan.
$ svgOptimizer -> getContent ();getOptimizedSizeMengembalikan ukuran file SVG yang dioptimalkan.
$ svgOptimizer -> getMetaData ()-> getOptimizedSize ();getOriginalSizeMengembalikan ukuran file SVG asli.
$ svgOptimizer -> getMetaData ()-> getOriginalSize ();getSavedBytesMengembalikan jumlah byte yang disimpan oleh proses optimasi.
$ svgOptimizer -> getMetaData ()-> getSavedBytes ();getSavedPercentageMengembalikan persentase byte yang disimpan oleh proses optimasi.
$ svgOptimizer -> getMetaData ()-> getSavedPercentage ();Untuk daftar lengkap fitur yang diusulkan dan masalah yang diketahui, lihat masalah terbuka.
Kami menyambut semua kontribusi! Jika Anda memiliki ide untuk perbaikan, jangan ragu untuk membayar repositori dan mengirimkan permintaan tarik. Anda juga dapat membuka masalah. Jika Anda menemukan proyek ini bermanfaat, jangan lupa untuk memberikannya bintang!
Perpustakaan mengimplementasikan pola strategi, di mana strategi dirangkum sebagai "aturan" yang terletak di direktori /src/Services/Rules .
Buat aturan :
Menerapkan SvgOptimizerRuleInterface dengan menambahkan kelas baru di Direktori /src/Services/Rules .
Menulis tes :
Kembangkan kasus uji komprehensif untuk aturan Anda di direktori /tests/Services/Rules untuk memastikannya berperilaku seperti yang diharapkan.
Mengintegrasikan aturan :
/src/Services/SvgOptimizerService.php ./src/Commands/SvgOptimizerCommand.php . Perbarui dokumentasi :
Dokumentasikan fungsionalitas dan tujuan aturan Anda di README.md .
Mengikuti langkah -langkah ini memastikan aturan Anda terintegrasi dengan mulus ke dalam proyek.
Untuk menggunakan proyek dengan Docker, Anda dapat memulai wadah menggunakan:
docker-compose up -dKemudian, akses wadah:
docker exec -it php-svg-optimizer bashJalankan phpstan:
composer phpstanJalankan tes:
composer testKode format:
composer formatProyek ini dilisensikan di bawah lisensi MIT. Lihat file lisensi untuk informasi lebih lanjut.
Meskipun alat ini telah diuji secara menyeluruh dan dibangun dengan cara yang menghindari perubahan berisiko, penggunaannya adalah risiko Anda sendiri. Kami tidak dapat menjamin bahwa itu akan sepenuhnya kompatibel dengan semua file SVG atau alur kerja. Sangat disarankan untuk menguji alat dengan file SVG sampel dan memastikan kompatibilitas dengan kasus penggunaan spesifik Anda sebelum menggunakannya di lingkungan produksi.