PHP base64
生活随笔
收集整理的這篇文章主要介紹了
PHP base64
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
<?php
header('Content-type:text/html;charset=utf-8');
function image_base64($image_file) {// getimagesize獲取圖片的屬性值返回一個(gè)數(shù)組,索引0對(duì)應(yīng)圖片寬度,索引1對(duì)應(yīng)圖片高度/** getimagesize獲取圖片的屬性值返回一個(gè)數(shù)組,這里 $image_info['mime'] 對(duì)應(yīng)的值就是字符串 "image/jpeg"* 索引 0 給出的是圖像寬度的像素值* 索引 1 給出的是圖像高度的像素值* 索引 2 給出的是圖像的類(lèi)型,返回的是數(shù)字,其中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 給出的是一個(gè)寬度和高度的字符串,可以直接用于 HTML 的 <image> 標(biāo)簽* 索引 bits 給出的是圖像的每種顏色的位數(shù),二進(jìn)制格式* 索引 channels 給出的是圖像的通道值,RGB 圖像默認(rèn)是 3* 索引 mime 給出的是圖像的 MIME 信息,此信息可以用來(lái)在 HTTP Content-type 頭信息中發(fā)送正確的信息,如:* header("Content-type: image/jpeg");*/$image_info = getimagesize ( $image_file );// 組合成base64編碼// chunk_split 將 base64_encode() 的輸出轉(zhuǎn)換成符合 RFC 2045 語(yǔ)義的字符串。它會(huì)在每 chunklen(默認(rèn)為 76)個(gè)字符后邊插入 end(默認(rèn)為空格 " ")// 此處不用chunk_split函數(shù)處理也行,對(duì)于<img>標(biāo)簽顯示圖像沒(méi)影響// 字符串雙引號(hào)中數(shù)組用{}擴(kuò)起來(lái),即可在字符串中正常顯示其中內(nèi)容$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數(shù)據(jù)流并創(chuàng)建圖片文件** @param string $base64_image base64數(shù)據(jù)流* @param string $put_url 存放圖片文件目錄,路徑后不用加斜杠/* @param string $fileName 圖片文件名稱(chēng)(不含文件后綴)* @return mixed 返回可在瀏覽器訪(fǎng)問(wèn)的圖片地址或布爾類(lèi)型*/
function base64DecImg($base64_image, $put_url, $fileName) {// 瀏覽器訪(fǎng)問(wèn)當(dāng)前路徑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];// 拼接要合成圖片的完整路徑及擴(kuò)展名// DIRECTORY_SEPARATOR目錄分隔符,由于win與linux目錄分隔符不同,PHP根據(jù)當(dāng)前系統(tǒng)返回正確目錄分隔符。windows返回\ 或 /,linux返回/$file_url = $put_url . DIRECTORY_SEPARATOR . $fileName . '.' . $postfix;// 去掉$base64_image碼中頭部?jī)?nèi)容,獲取文件編碼部分內(nèi)容$base64Arr = explode(",",$base64_image);// 經(jīng)base64_decode解碼$image_decode = base64_decode ($base64Arr[1] );try {// 合成文件file_put_contents ( $file_url, $image_decode );// 返回可在瀏覽器訪(fǎng)問(wèn)的圖片地址return $__URL__ . $file_url;} catch ( Exception $e ) {return false;}}} catch ( Exception $e ) {return false;}return false;
}
// ./表示當(dāng)前頁(yè)面的所在路徑
echo base64DecImg ( $base64_image, "./", "test2" );
?>data:image/*;base64 就是 Data URI scheme。
Data URI scheme是在RFC2397中定義的,目的是將一些小的數(shù)據(jù),直接嵌入到網(wǎng)頁(yè)中,從而不用再?gòu)耐獠课募d入
例如:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEBLAEsAAD/4RVFRXhpZgAATU0AKgAAAAgACgEPAA......
base64碼中,data表示取得數(shù)據(jù)的協(xié)定名稱(chēng),image/jpeg 是數(shù)據(jù)類(lèi)型名稱(chēng),base64 是數(shù)據(jù)的編碼方法,逗號(hào)后面就是這個(gè)文件base64編碼后的數(shù)據(jù)目前,Data URI scheme支持的類(lèi)型有:
data:,文本數(shù)據(jù)
data:text/plain,文本數(shù)據(jù)
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圖片數(shù)據(jù)
data:image/png;base64,base64編碼的png圖片數(shù)據(jù)
data:image/jpeg;base64,base64編碼的jpeg圖片數(shù)據(jù)
data:image/x-icon;base64,base64編碼的icon圖片數(shù)據(jù)
base64簡(jiǎn)單地說(shuō),它把一些 8-bit 數(shù)據(jù)翻譯成標(biāo)準(zhǔn) ASCII 字符,網(wǎng)上有很多免費(fèi)的base64 編碼和解碼的工具
?
轉(zhuǎn)載于:https://www.cnblogs.com/dreamhome/p/6010622.html
總結(jié)
以上是生活随笔為你收集整理的PHP base64的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iOS面试必看,最全梳理
- 下一篇: jdbc java数据库连接 3)Sta