
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 에있는 Builder에 새 규칙을 등록하십시오./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 파일로 도구를 테스트하고 프로덕션 환경에서 사용하기 전에 특정 사용 사례와의 호환성을 보장하는 것이 좋습니다.