於 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 的優缺點分析, 此篇有清楚的說明