PHP base64


<?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 編碼和解碼的工具

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM