
php-svg-optimizer เป็นไลบรารี PHP ที่ออกแบบมาเพื่อเพิ่มประสิทธิภาพไฟล์ SVG โดยใช้การแปลงและการดำเนินการทำความสะอาดต่างๆ ห้องสมุดช่วยให้มั่นใจได้ว่าไฟล์ SVG ที่ได้รับการปรับปรุงให้ดีขึ้นนั้น สอดคล้องกับข้อกำหนด SVG 2.0
เครื่องมือมุ่งมั่นที่จะปรับให้เหมาะสมที่สุดเท่าที่จะเป็นไปได้โดยไม่สูญเสียข้อมูลใด ๆ ที่สามารถบิดเบือนคุณภาพของภาพได้มั่นใจว่า SVG ที่เกิดขึ้นจะยังคงมองเห็นได้เหมือนเดิมในขณะที่มีประสิทธิภาพมากขึ้นในแง่ของขนาดและประสิทธิภาพ
| รุ่น | PHP | เอกสาร |
|---|---|---|
| ^5.1 | ^8.3 | ปัจจุบัน |
ext-dom : ส่วนขยาย PHP ที่ต้องการสำหรับการจัดการ XMLext-libxml : ส่วนขยาย PHP ที่ต้องการสำหรับการจัดการข้อผิดพลาด XMLในการติดตั้งไลบรารี Run:
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 );minifies แอตทริบิวต์การแปลงโดยการลบค่าที่ซ้ำซ้อน:
$ svgOptimizer -> withRules (minifyTransformations: true );ลบการประกาศ SVG Doctype:
$ svgOptimizer -> withRules (removeDoctype: true ); ลบแอตทริบิวต์ enable-background จาก SVG:
$ svgOptimizer -> withRules (removeEnableBackgroundAttribute: true );ลบแอตทริบิวต์ที่ว่างเปล่าจาก SVG:
$ svgOptimizer -> withRules (removeEmptyAttributes: 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/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โครงการนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม
แม้ว่าเครื่องมือจะได้รับการทดสอบอย่างละเอียดและถูกสร้างขึ้นในลักษณะที่หลีกเลี่ยงการเปลี่ยนแปลงที่มีความเสี่ยง แต่การใช้งานนั้นเป็นความเสี่ยงของคุณเอง เราไม่สามารถรับประกันได้ว่าจะเข้ากันได้อย่างสมบูรณ์กับไฟล์ SVG หรือเวิร์กโฟลว์ทั้งหมด ขอแนะนำอย่างยิ่งในการทดสอบเครื่องมือด้วยตัวอย่างไฟล์ SVG และตรวจสอบให้แน่ใจว่าเข้ากันได้กับกรณีการใช้งานเฉพาะของคุณก่อนที่จะใช้ในสภาพแวดล้อมการผลิต