該軟體包可以透過一系列各種影像優化工具運行 PNG、JPG、WEBP、AVIF、SVG 和 GIF 來優化它們。使用方法如下:
使用 SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage);
$pathToImage
處的影像將會被較小的最佳化版本所覆蓋。該軟體包將自動檢測您的系統上安裝了哪些優化二進位並使用它們。
以下是該套件完成的一些範例轉換。
喜歡 Laravel?然後轉到 Laravel 特定整合。
使用WordPress?然後嘗試 WP CLI 指令。
SilverStripe 愛好者?不要浪費時間,請前往 SilverStripe 模組。
我們投入了大量資源來創建一流的開源套件。您可以透過購買我們的一款付費產品來支持我們。
我們非常感謝您從家鄉寄給我們一張明信片,並註明您正在使用我們的哪種套餐。您可以在我們的聯絡頁面上找到我們的地址。我們在虛擬明信片牆上發布所有收到的明信片。
您可以透過 Composer 安裝該軟體包:
作曲家需要空間/影像優化器
如果您的系統上存在這些優化器,該軟體包將使用它們:
傑普優化
最佳化
彭量化2
SVGO 1
動畫棒
網路程式
阿維芬
以下是在 Ubuntu/Debian 上安裝所有優化器的方法:
sudo apt-get install jpegoptim sudo apt-get install optipng sudo apt-get install pngquant 須藤 npm install -g svgo 須藤 apt-get 安裝 gifsicle sudo apt-get install 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 須藤 dnf 安裝 jpegoptim sudo dnf 安裝 optipng 須藤 dnf 安裝 pngquant 須藤 npm install -g svgo sudo dnf 安裝 gifsicle sudo dnf 安裝 libwebp-tools sudo dnf 安裝 libavif-tools
該軟體包將自動決定在特定影像上使用哪些工具。
透過 JpegOptim 運行 JPG 將會變小。使用這些選項:
-m85
:這將以 85% 的品質儲存影像。此設定似乎滿足 Google 的 Pagespeed 壓縮規則
--strip-all
:這會刪除所有文字訊息,例如註釋和 EXIF 數據
--all-progressive
:這將確保產生的映像是漸進式映像,這意味著可以使用逐步更高細節的多次傳遞來下載它。
透過兩個工具運行 PNG 可以使其變小。第一個是 Pngquant 2,一個有損 PNG 壓縮器。我們沒有設定額外的選項,使用它們的預設值。之後,我們透過第二個圖像運行圖像:Optipng。使用這些選項:
-i0
:這將產生非隔行、逐行掃描影像
-o2
:這將最佳化等級設為二級(多次 IDAT 壓縮試驗)
SVG 將會被 SVGO 縮小。將使用 SVGO 的預設配置,省略cleanupIDs
和removeViewBox
插件,因為已知這些插件在一頁上顯示多個最佳化的 SVG 時會造成問題。
請注意 SVGO 可能會破壞您的 svg。您可以在 Sara Soueidan 撰寫的這篇精彩文章中找到更多相關資訊。
GIF 將透過 Gifsicle 進行優化。將使用這些選項:
-O3
:這將最佳化等級設為 Gifsicle 的最大值,這會產生最慢但最好的結果
WEBP 將由 Cwebp 進行最佳化。將使用這些選項:
-m 6
使用最慢的壓縮方法以獲得最佳壓縮效果。
-pass 10
用於最大化分析遍數。
-mt
多線程以提高一些速度。
-q 90
帶來最不明顯改變的品質因數。
(設定原始取自這裡)
avifenc 將優化 AVIF。將使用這些選項:
-a cq-level=23
:恆定品質等級。較低的值意味著更好的品質和更大的檔案大小 (0-63)。
-j all
:作業數量(工作線程, all
使用所有可用核心)。
--min 0
:顏色的最小量化器(0-63)。
--max 63
:顏色的最大量化器(0-63)。
--minalpha 0
: alpha 的最小量化器 (0-63)。
--maxalpha 63
: alpha 的最大量化器 (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 function binaryName(): 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 string */public function getCommand(): string; }
如果您想查看範例實現,請查看此套件附帶的現有優化器。
您可以使用OptimizerChain
上的addOptimizer
方法輕鬆新增優化器。
使用 SpatieImageOptimizerImageOptimizerFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain ->addOptimizer(new YourCustomOptimizer()) ->優化($pathToImage);
預設情況下,該包不會拋出任何錯誤,只是靜默運行。要驗證包正在做什麼,您可以設定一個記錄器:
使用 SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain ->useLogger(new MyLogger()) ->優化($pathToImage);
記錄器是一個實作PsrLogLoggerInterface
的類別。 Monolog 是一個完全相容的優秀日誌庫。該套件將寫入日誌使用了哪些Optimizers
、執行了哪些命令及其輸出。
以下是該包完成的一些現實生活範例轉換。
JPG、WEBP、AVIF 影像的方法:原始影像已饋送到 spatie/image(使用預設的 GD 驅動程式)並調整為 2048px 寬度:
SpatieImageImage::load('original.jpg') ->寬度(2048) ->儲存('圖片.jpg'); // 圖片.png、圖片.webp、圖片.avif
原來的
771 KB
最佳化
511 KB(-33.7%,DSSIM:0.00052061)
致謝:Jeff Sheldon,來自 Unsplash
原來的
461 KB
最佳化
184 KB(-60.0%,DSSIM:0.00166036)
致謝:Jeff Sheldon,來自 Unsplash
原來的
725 KB
最佳化
194 KB(-73.2%,DSSIM:0.00163751)
致謝:Jeff Sheldon,來自 Unsplash
原文:Photoshop「另存為網頁」| PNG-24 透明
39KB
最佳化
16 KB(-59%,DSSIM:0.00000251)
原創:插畫| Web 最佳化的 SVG 匯出
25KB
最佳化
20 KB (-21.5%)
請參閱變更日誌以了解最近變更的更多資訊。
作曲家測試
詳細資訊請參閱貢獻。
如果您發現有關安全的錯誤,請發送郵件至 [email protected],而不是使用問題追蹤器。
您可以自由使用這個軟體包(它是 MIT 許可的),但如果它進入您的生產環境,我們非常感謝您從您的家鄉給我們寄一張明信片,註明您正在使用我們的哪個軟體包。
我們的地址是:Spatie, Kruikstraat 22, 2018 安特衛普, 比利時。
我們在公司網站上發布所有收到的明信片。
弗里克·范德赫滕
所有貢獻者
這個包的靈感來自 psliwa/image-optimizer
Joke Forment 提供的情感支持
麻省理工學院許可證 (MIT)。請參閱許可證文件以獲取更多資訊。