
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 );يزيل إعلان SVG Doctype:
$ 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يحفظ ملف 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 svgoptimizerservice.php./src/Commands/SvgOptimizerCommand.php . وثائق تحديث :
قم بتوثيق وظيفة القاعدة الخاصة بك والغرض منها في README.md .
يضمن اتباع هذه الخطوات دمج قاعدتك بسلاسة في المشروع.
لاستخدام المشروع مع Docker ، يمكنك بدء الحاوية باستخدام:
docker-compose up -dثم ، الوصول إلى الحاوية:
docker exec -it php-svg-optimizer bashتشغيل phpstan:
composer phpstanإجراء اختبارات:
composer testرمز التنسيق:
composer formatهذا المشروع مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. انظر ملف الترخيص لمزيد من المعلومات.
على الرغم من أن الأداة قد تم اختبارها بدقة وهي مبنية بطريقة تتجنب التغييرات المحفوفة بالمخاطر ، إلا أن استخدامها على مسؤوليتك الخاصة. لا يمكننا أن نضمن أنها ستكون متوافقة تمامًا مع جميع ملفات SVG أو سير العمل. يوصى بشدة باختبار الأداة مع عينة من ملفات SVG وضمان التوافق مع حالة الاستخدام المحددة قبل استخدامها في بيئة الإنتاج.