<?php header('Content-type:text/html;charset=utf-8'); function image_base64($image_file) { // getimagesize獲取圖片的屬性值返回一個數組,索引0對應圖片寬度,索引1對應圖片高度 /* * getimagesize獲取圖片的屬性值返回一個數組,這里 $image_info['mime'] 對應的值就是字符串 "image/jpeg" * 索引 0 給出的是圖像寬度的像素值 * 索引 1 給出的是圖像高度的像素值 * 索引 2 給出的是圖像的類型,返回的是數字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM * 索引 3 給出的是一個寬度和高度的字符串,可以直接用於 HTML 的 <image> 標簽 * 索引 bits 給出的是圖像的每種顏色的位數,二進制格式 * 索引 channels 給出的是圖像的通道值,RGB 圖像默認是 3 * 索引 mime 給出的是圖像的 MIME 信息,此信息可以用來在 HTTP Content-type 頭信息中發送正確的信息,如: * header("Content-type: image/jpeg"); */ $image_info = getimagesize ( $image_file ); // 組合成base64編碼 // chunk_split 將 base64_encode() 的輸出轉換成符合 RFC 2045 語義的字符串。它會在每 chunklen(默認為 76)個字符后邊插入 end(默認為空格 " ") // 此處不用chunk_split函數處理也行,對於<img>標簽顯示圖像沒影響 // 字符串雙引號中數組用{}擴起來,即可在字符串中正常顯示其中內容 $base64_image = "data:{$image_info['mime']};base64," . chunk_split ( base64_encode ( file_get_contents ( $image_file ) ) ); return $base64_image; } $image_file = './test.jpg'; $base64_image = image_base64 ( $image_file ); // 獲取到的base64碼為 data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEBLAEsAAD/4RVFRXhpZgAATU0AKgAAAAgACgEPAA...... ?> <img src="<?php echo $base64_image;?>" /> <?php /** * 反編譯data/base64數據流並創建圖片文件 * * @param string $base64_image base64數據流 * @param string $put_url 存放圖片文件目錄,路徑后不用加斜杠/ * @param string $fileName 圖片文件名稱(不含文件后綴) * @return mixed 返回可在瀏覽器訪問的圖片地址或布爾類型 */ function base64DecImg($base64_image, $put_url, $fileName) { // 瀏覽器訪問當前路徑URL $__URL__ = 'localhost/test/'; try { // 分割base64碼,獲取頭部編碼部分 $headData = explode ( ';', $base64_image ); // 再獲取編碼前原文件的后綴信息 $postfix = explode ( '/', $headData [0] ); // 判斷源文件是否是圖片 if (strstr ( $postfix [0], 'image' )) { // 判斷是否是jpeg圖片,並賦正確后綴名 $postfix = $postfix [1] == 'jpeg' ? 'jpg' : $postfix [1]; // 拼接要合成圖片的完整路徑及擴展名 // DIRECTORY_SEPARATOR目錄分隔符,由於win與linux目錄分隔符不同,PHP根據當前系統返回正確目錄分隔符。windows返回\ 或 /,linux返回/ $file_url = $put_url . DIRECTORY_SEPARATOR . $fileName . '.' . $postfix; // 去掉$base64_image碼中頭部內容,獲取文件編碼部分內容 $base64Arr = explode(",",$base64_image); // 經base64_decode解碼 $image_decode = base64_decode ($base64Arr[1] ); try { // 合成文件 file_put_contents ( $file_url, $image_decode ); // 返回可在瀏覽器訪問的圖片地址 return $__URL__ . $file_url; } catch ( Exception $e ) { return false; } } } catch ( Exception $e ) { return false; } return false; } // ./表示當前頁面的所在路徑 echo base64DecImg ( $base64_image, "./", "test2" ); ?> data:image/*;base64 就是 Data URI scheme。 Data URI scheme是在RFC2397中定義的,目的是將一些小的數據,直接嵌入到網頁中,從而不用再從外部文件載入 例如: data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEBLAEsAAD/4RVFRXhpZgAATU0AKgAAAAgACgEPAA...... base64碼中,data表示取得數據的協定名稱,image/jpeg 是數據類型名稱,base64 是數據的編碼方法,逗號后面就是這個文件base64編碼后的數據 目前,Data URI scheme支持的類型有: data:,文本數據 data:text/plain,文本數據 data:text/html,HTML代碼 data:text/html;base64,base64編碼的HTML代碼 data:text/css,CSS代碼 data:text/css;base64,base64編碼的CSS代碼 data:text/javascript,Javascript代碼 data:text/javascript;base64,base64編碼的Javascript代碼 data:image/gif;base64,base64編碼的gif圖片數據 data:image/png;base64,base64編碼的png圖片數據 data:image/jpeg;base64,base64編碼的jpeg圖片數據 data:image/x-icon;base64,base64編碼的icon圖片數據 base64簡單地說,它把一些 8-bit 數據翻譯成標准 ASCII 字符,網上有很多免費的base64 編碼和解碼的工具