| 特性 | Baseline JPEG (標準) | Progressive JPEG (漸進式) |
|---|---|---|
| 掃描方式 | 單次掃描,頂部到底部 | 多次掃描,模糊→清晰 |
| 加載體驗 | 逐行顯示,慢網下長時間空白 | 先顯示縮圖輪廓,隨著下載細化 |
| 文件大小 | 略小 | 略大(通常 +2~10%) |
| 適用場景 | 小圖標、內網高速環境 | 大圖、公網、移動端、弱網 |
<?php
$src = 'input.jpg';
$dst = 'output_progressive.jpg';
$im = imagecreatefromjpeg($src);
if (!$im) die('無法讀取源圖片');
// 關鍵:開啟隔行掃描標記
imageinterlace($im, true); // 或 1
// 輸出,質量 80 平衡體積與清晰度
imagejpeg($im, $dst, 80);
imagedestroy($im);
echo "轉換完成:$dst";
?>
使用 ImageMagick identify 命令:
identify -verbose output_progressive.jpg | grep Interlace # 輸出 Interlace: JPEG 即為漸進式 # 若輸出 Interlace: None 則為標準模式
<?php
$dir = 'images/';
$quality = 80;
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($iterator as $file) {
if ($file->isFile() && in_array(strtolower($file->getExtension()), ['jpg','jpeg'])) {
$src = $file->getPathname();
$dst = $src . '.prog.jpg'; // 或覆蓋原文件
$im = @imagecreatefromjpeg($src);
if ($im) {
imageinterlace($im, true);
imagejpeg($im, $dst, $quality);
imagedestroy($im);
echo "OK: $src\n";
} else {
echo "FAIL: $src\n";
}
}
}
?>
imageinterlace($im, true) 設置 PNG 的隔行掃描標記,對 JPEG 創建時生效,使編碼器輸出多掃描數據jpeg_write_scanlines 多次寫入image_filter 實時轉換WebP 格式並存,<picture> 標簽按支持度選擇