您現在的位置是:首頁 > PHP基礎

李清波 2017-11-20 PHP基礎 2029

PHP實現將base64格式圖片保存在指定目錄的方法

PHP對Base64的支持非常好,有內置的base64_encode與base64_decode負責圖片的Base64編碼與解碼。


編碼上,只要將圖片流讀取到,而后使用base64_encode進行進行編碼即可得到。


而解碼就略微麻煩一點,究其原因在于把圖片編碼成base64字符串后,編碼內會加入這些字符 data:image/png;base64,本來是用于base64進行識別的。但是如果直接放到php里用base64_decode函數解碼會導致最終保存的圖片文件格式損壞,而解決方法就是先去掉這一串字符:


示例:

header('Content-type:text/html;charset=utf-8');
        $base64_image_content = 'data:image/jpeg;base64,xxxxxxxxxxxxxxxxxxxxxx'; //

        //匹配出圖片的格式
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
            $type = $result[2];
            $new_file = "uploads/test/".date('Ymd',time())."/";
            if(!file_exists($new_file)) {
                //檢查是否有該文件夾,如果沒有就創建,并給予最高權限
                mkdir($new_file, 0700);
            }
            $new_file = $new_file.time().".{$type}";
            if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){
                echo '新文件保存成功:', $new_file;
            }else{
                echo '新文件保存失敗';
            }
        }


簡單寫法:

$base64_string= explode(',', $base64_string); //截取data:image/png;base64, 這個逗號后的字符
$data= base64_decode($base64_string[1]);  //對截取后的字符使用base64_decode進行解碼
file_put_contents($url, $data); //寫入文件并保存


相比上面的寫法其實是一樣的,只不過上面的是稍微完善一點的。


以上兩種寫法都可以。

評論