於 HTML 使用 Data URI 的主要好處, 就是網頁不需要另外發 Request 去要檔案, 而且 Gzip 壓縮打開, 據說壓縮效率也會優於圖片壓縮比率.
註: 有優點當然會有缺點, 但是在此就不詳述了, 相關網頁有清楚說明的網頁, 請在自行觀看.
不過, 這些都不是重點, 重點在於需要時就會要用, 不需要用的話, 優點再多也沒用~ 😛
PHP Data URI 轉換程式
照理說 Data URI 在 PHP 只要一行就可以搞定, 如下:
<?php function get_data_uri($filename) { return 'data:' . mime_content_type($filename) . ';base64,' . base64_encode(file_get_contents($filename)); } ?>
但是 mime_content_type() 居然出現 deprecated 的字樣, 於是來改寫一下 Function 以防未來使用.
註: 官方建議 mime_content_type() 可以使用 Fileinfo 來取代.
若原始 Function 不想動, 可以用下述方式解決.
<?php if (!function_exists('mime_content_type')) { function mime_content_type($filename) { $finfo = new finfo(); return $finfo->file($filename, FILEINFO_MIME_TYPE); } } ?>
重新撰寫 get_data_uri() Function 如下述:
<?php function get_data_uri($filename) { if (function_exists('mime_content_type')) { $mime = mime_content_type($filename); } else { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $filename); // $finfo = new finfo(); // $mime = $finfo->file($filename, FILEINFO_MIME_TYPE); } return 'data:' . $mime . ';base64,' . base64_encode(file_get_contents($filename)); } ?>
使用方式
<img src="<?php echo get_data_uri($filename); ?>">
相關網頁
- 淺嚐Data URI - 關於 Data URI 的優缺點分析, 此篇有清楚的說明