이 패키지는 다양한 이미지 최적화 도구 체인을 통해 PNG, JPG, WEBP, AVIF, SVG 및 GIF를 실행하여 최적화할 수 있습니다. 사용 방법은 다음과 같습니다.
SpatieImageOptimizerOptimizerChainFactory 사용;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage);
$pathToImage
의 이미지는 더 작아야 하는 최적화된 버전으로 덮어쓰여집니다. 패키지는 시스템에 설치된 최적화 바이너리를 자동으로 감지하여 사용합니다.
다음은 이 패키지에서 수행된 몇 가지 변환 예입니다.
라라벨을 사랑하시나요? 그런 다음 Laravel 특정 통합으로 이동하세요.
WordPress를 사용하시나요? 그런 다음 WP CLI 명령을 사용해 보세요.
SilverStripe 매니아인가요? 시간을 낭비하지 말고 SilverStripe 모듈로 이동하세요.
우리는 동급 최고의 오픈 소스 패키지를 만드는 데 많은 리소스를 투자합니다. 유료 제품 중 하나를 구매하여 우리를 지원할 수 있습니다.
귀하가 사용하고 있는 당사 패키지를 언급하면서 귀하의 고향에서 엽서를 보내주셔서 진심으로 감사드립니다. 연락처 페이지에서 주소를 확인하실 수 있습니다. 우리는 수신된 모든 엽서를 가상 엽서 월에 게시합니다.
작곡가를 통해 패키지를 설치할 수 있습니다.
작곡가에게는 spatie/image-optimizer가 필요합니다.
시스템에 이러한 최적화 프로그램이 있는 경우 패키지는 다음 최적화 프로그램을 사용합니다.
JpegOptim
선택
핑퀀트 2
SVGO 1
기프시클
cwebp
아비펜
Ubuntu/Debian에 모든 최적화 프로그램을 설치하는 방법은 다음과 같습니다.
sudo apt-get 설치 jpegoptim sudo apt-get 설치 optipng sudo apt-get 설치 pngQuant sudo npm 설치 -g svgo sudo apt-get 설치 gifsicle sudo apt-get 설치 webp sudo apt-get install libavif-bin # 최소 0.9.3
MacOS에 바이너리를 설치하는 방법은 다음과 같습니다(Homebrew 사용).
양조 설치 jpegoptim 양조 설치 옵션 양조 설치 pngQuant npm 설치 -g svgo 양조 설치 GIFsicle 양조 설치 webp 양조 설치 libavif
Fedora/RHEL/CentOS에 바이너리를 설치하는 방법은 다음과 같습니다.
sudo dnf 설치 epel-release sudo dnf 설치 jpegoptim sudo dnf 설치 optipng sudo dnf 설치 pngQuant sudo npm 설치 -g svgo sudo dnf 설치 gifsicle sudo dnf 설치 libwebp-tools sudo dnf 설치 libavif-tools
패키지는 특정 이미지에 사용할 도구를 자동으로 결정합니다.
JPG는 JpegOptim을 통해 실행하면 더 작아집니다. 다음 옵션이 사용됩니다.
-m85
: 이미지를 85% 품질로 저장합니다. 이 설정은 Google의 Pagespeed 압축 규칙을 충족하는 것 같습니다.
--strip-all
: 주석 및 EXIF 데이터와 같은 모든 텍스트 정보를 제거합니다.
--all-progressive
: 결과 이미지가 점진적인 이미지인지 확인합니다. 즉, 점진적으로 더 높은 세부 정보를 여러 번 통과하여 다운로드할 수 있다는 의미입니다.
PNG는 두 가지 도구를 통해 실행하여 더 작아집니다. 첫 번째는 손실이 많은 PNG 압축기인 PngQuant 2입니다. 추가 옵션을 설정하지 않으며 기본값이 사용됩니다. 그런 다음 두 번째 이미지인 Optipng를 통해 이미지를 실행합니다. 다음 옵션이 사용됩니다.
-i0
: 인터레이스가 아닌 프로그레시브 스캔 이미지가 생성됩니다.
-o2
: 최적화 수준을 2로 설정합니다(다중 IDAT 압축 시도).
SVG는 SVGO에 의해 축소됩니다. SVGO의 기본 구성이 사용되며, cleanupIDs
및 removeViewBox
플러그인은 생략됩니다. 한 페이지에 여러 개의 최적화된 SVG를 표시할 때 문제를 일으키는 것으로 알려져 있기 때문입니다.
SVGO는 svg를 손상시킬 수 있다는 점에 유의하세요. 이에 대한 자세한 정보는 Sara Soueidan의 훌륭한 블로그 게시물에서 확인할 수 있습니다.
GIF는 Gifsicle에 의해 최적화됩니다. 다음 옵션이 사용됩니다.
-O3
: 최적화 수준을 Gifsicle의 최대값으로 설정하여 가장 느리지만 최상의 결과를 생성합니다.
WEBP는 Cwebp에 의해 최적화됩니다. 다음 옵션이 사용됩니다.
-m 6
최상의 압축을 얻기 위한 가장 느린 압축 방법입니다.
-분석 패스의 양을 최대화하려면 -pass 10
.
-mt
멀티스레딩으로 일부 속도 향상.
-q 90
가장 눈에 띄지 않는 변화를 가져오는 품질 요소입니다.
(설정은 여기에서 원본을 가져왔습니다)
AVIF는 avifenc에 의해 최적화됩니다. 다음 옵션이 사용됩니다.
-a cq-level=23
: 일정한 품질 수준. 값이 낮을수록 품질이 향상되고 파일 크기가 커집니다(0-63).
-j all
: 작업 수(작업자 스레드, all
사용 가능한 모든 코어를 사용함)
--min 0
: 색상에 대한 최소 양자화기(0-63).
--max 63
: 색상에 대한 최대 양자화기(0-63).
--minalpha 0
: 알파(0-63)에 대한 최소 양자화기입니다.
--maxalpha 63
: 알파에 대한 최대 양자화기(0-63).
-a end-usage=q
속도 제어 모드가 일정한 품질 모드로 설정되었습니다.
-a tune=ssim
: SSIM은 왜곡 메트릭에 대한 인코더를 조정합니다.
(설정은 여기와 여기에서 원본으로 가져왔습니다)
패키지를 사용하는 기본 방법은 다음과 같습니다.
SpatieImageOptimizerOptimizerChainFactory 사용;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage);
$pathToImage
의 이미지는 더 작아야 하는 최적화된 버전으로 덮어쓰여집니다.
패키지는 시스템에 설치된 최적화 바이너리를 자동으로 감지하여 사용합니다.
원본 이미지를 유지하려면 두 번째 인수인 optimize
통과하면 됩니다.
SpatieImageOptimizerOptimizerChainFactory 사용;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage, $pathToOutput);
이 예에서 패키지는 $pathToImage
건드리지 않고 $pathToOutput
에 최적화된 버전을 작성합니다.
setTimeout
호출하여 체인의 각 개별 최적화 프로그램이 사용할 수 있는 최대 시간(초)을 설정할 수 있습니다.
$optimizerChain->setTimeout(10) ->최적화($pathToImage);
이 예에서 체인의 각 최적화 프로그램은 해당 작업을 수행하는 데 최대 10초를 얻습니다.
최적화 프로그램 체인을 사용자 정의하려면 Optimizer
를 OptimizerChain
에 수동으로 추가하면 됩니다.
다음은 optipng
및 jpegoptim
만 사용하려는 예입니다.
SpatieImageOptimizerOptimizerChain 사용; SpatieImageOptimizerOptimizersJpegoptim 사용; SpatieImageOptimizerOptimizersPngQuant 사용;$optimizerChain = (새 OptimizerChain) ->addOptimizer(new Jpegoptim([ '--strip-all', '--all-progressive', ])) ->addOptimizer(new PngQuant([ '--force', ]))
Optimizer
사용해야 하는 옵션을 생성자에 전달할 수 있습니다.
다른 명령줄 유틸리티를 사용하여 이미지를 최적화하고 싶으십니까? 괜찮아요. 자신만의 옵티마이저를 작성해 보세요. 최적화 프로그램은 SpatieImageOptimizerOptimizersOptimizer
인터페이스를 구현하는 모든 클래스입니다.
네임스페이스 SpatieImageOptimizerOptimizers;사용 SpatieImageOptimizerImage;인터페이스 최적화 프로그램 {/** * 실행할 바이너리의 이름을 반환합니다. * * @return string */public functionbinaryName(): string;/** * 주어진 이미지가 최적화 프로그램에 의해 처리될 수 있는지 결정합니다. * * @param SpatieImageOptimizerImage $image * * @return bool */public function canHandle(Image $image): bool;/** * 최적화해야 하는 이미지의 경로를 설정합니다. * * @param string $imagePath * * @return $this */public function setImagePath(string $imagePath);/** * 최적화 프로그램이 사용해야 하는 옵션을 설정합니다. * * @param array $options * * @return $this */public function setOptions(array $options = []);/** * 실행해야 하는 명령을 가져옵니다. * * @return 문자열 */public function getCommand(): 문자열; }
구현 예를 보려면 이 패키지와 함께 제공되는 기존 최적화 프로그램을 살펴보세요.
OptimizerChain
의 addOptimizer
메소드를 사용하여 최적화 프로그램을 쉽게 추가할 수 있습니다.
SpatieImageOptimizerImageOptimizerFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain 사용 ->addOptimizer(새로운 YourCustomOptimizer()) ->최적화($pathToImage);
기본적으로 패키지는 오류를 발생시키지 않고 자동으로 작동합니다. 패키지가 수행하는 작업을 확인하려면 로거를 설정할 수 있습니다.
SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain 사용 ->useLogger(새 MyLogger()) ->최적화($pathToImage);
로거는 PsrLogLoggerInterface
구현하는 클래스입니다. 완벽하게 호환되는 좋은 로깅 라이브러리는 Monolog입니다. 패키지는 사용된 Optimizers
, 실행된 명령 및 해당 출력을 로그에 기록합니다.
다음은 이 패키지로 수행된 실제 변환 예제입니다.
JPG, WEBP, AVIF 이미지에 대한 방법론: 원본 이미지가 spatie/image(기본 GD 드라이버 사용)에 공급되고 2048px 너비로 크기가 조정되었습니다.
SpatieImageImage::load('original.jpg') ->너비(2048) ->저장('이미지.jpg'); // image.png, image.webp, image.avif
원래의
771KB
최적화됨
511KB(-33.7%, DSSIM: 0.00052061)
크레딧: Jeff Sheldon, Unsplash를 통해
원래의
461KB
최적화됨
184KB(-60.0%, DSSIM: 0.00166036)
크레딧: Jeff Sheldon, Unsplash를 통해
원래의
725KB
최적화됨
194KB(-73.2%, DSSIM: 0.00163751)
크레딧: Jeff Sheldon, Unsplash를 통해
원본: Photoshop '웹용으로 저장' | 투명도가 있는 PNG-24
39KB
최적화됨
16KB(-59%, DSSIM: 0.00000251)
원본: 일러스트레이터 | 웹에 최적화된 SVG 내보내기
25KB
최적화됨
20KB(-21.5%)
최근 변경된 사항에 대한 자세한 내용은 CHANGELOG를 참조하세요.
작곡가 테스트
자세한 내용은 CONTRIBUTING을 참조하세요.
보안 관련 버그를 발견한 경우 이슈 트래커를 사용하는 대신 [email protected]로 메일을 보내주세요.
이 패키지(MIT 라이선스)를 무료로 사용할 수 있지만, 귀하의 프로덕션 환경에 적용된다면 귀하가 사용하고 있는 패키지를 언급하면서 고향에서 엽서를 보내주시면 감사하겠습니다.
주소는 Spatie, Kruikstraat 22, 2018 Antwerp, Belgium입니다.
우리는 받은 모든 엽서를 회사 웹사이트에 게시합니다.
프리크 반 데르 헤르텐
모든 기여자
이 패키지는 psliwa/image-optimizer에서 영감을 받았습니다.
Joke Forment에서 제공하는 정서적 지원
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.