php數(shù)據(jù)庫中將base64圖片數(shù)據(jù)轉化為可訪問src的方法詳解
情形再現(xiàn)
下面是一張工程機械的品牌表

這個表的logo就是存儲的base64的圖片。
當我們在對品牌列表進行查詢的時候,因為logoBase這個字段存儲的base64格式的圖片,大小基本在5kb左右。當我們一下子拉取1000條數(shù)據(jù)的時候,那么整個列表接口的數(shù)據(jù)量就在 5000kb的大小。這就會導致當用戶需要選擇品牌的時候,這個接口的響應速度需要4s,嚴重影響到了用戶的使用體驗。
問題分析
既然接口數(shù)據(jù)這么大,每次查詢數(shù)據(jù)庫都需要耗費時間。首先想到的就是把這些數(shù)據(jù)放置到redis緩存之中,這樣每次取緩存數(shù)據(jù)就不會這么慢了。但是,品牌列表是跟分類多對多的一種關系,存在篩選。緩存中沒法存儲這所有篩選情況的組合。
那么就只能在列表中剔除掉這個耗時的字段,然后從圖片接口中單獨取這張圖片的數(shù)據(jù)了。但是,這樣就導致了當前端拿取到列表時候,需要重新循環(huán)從接口拉取圖片數(shù)據(jù)。1000條數(shù)據(jù)就會循環(huán)1000次去圖片接口中拉取數(shù)據(jù)。循環(huán)接口拿數(shù)據(jù),這是非常的耗費資源的一種情況。
于是,我想到的是,直接用接口給前端返回一個資源文件,前端可以把配置的url直接扔到圖片的src中,這就實現(xiàn)了圖片的預覽功能。
具體實現(xiàn)
- 品牌列表中,直接干掉logoBase字段。這樣接口速度就非??炝?。
- 編寫圖片src的接口

默認接口返回的 Content-Type為application/json; charset=utf-8,此時瀏覽器就會以json的方式解析返回的內容。我們既然要返回png,那么Content-Type就要設置為image/png。
header('Content-type:image/png');
剩下的就是怎么將base64的內容解析成png圖片的內容了。
$image = imagepng(imagecreatefromstring(base64_decode(explode(',',$ret)[1])));
header('Content-type:image/png');
echo $image;
exit;
解析我們用到了php GD庫提供的一些方法。當?shù)玫搅藞D片的str內容時候,通過imagepng()方法將得到的內容轉成二進制進行輸出。這樣就可以達到訪問一個 url返回一張可以預覽的圖片效果了。

不足之處歡迎提供寶貴意見。
到此這篇關于php數(shù)據(jù)庫中將base64圖片數(shù)據(jù)轉化可訪問src的方法詳解的文章就介紹到這了,更多相關php將base64圖片轉化src內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
編寫PHP腳本來實現(xiàn)WordPress中評論分頁的功能
這篇文章主要介紹了編寫PHP腳本來實現(xiàn)WordPress中評論分頁的功能的方法,包括上一頁下一頁和導航式分頁功能的添加,需要的朋友可以參考下2015-12-12
WordPress開發(fā)中自定義菜單的相關PHP函數(shù)使用簡介
這篇文章主要介紹了WordPress開發(fā)中自定義菜單的相關PHP函數(shù)使用,包括過濾掉自定義菜單中無用的class值的方法,需要的朋友可以參考下2016-01-01
php通過function_exists檢測函數(shù)是否存在的方法
這篇文章主要介紹了php通過function_exists檢測函數(shù)是否存在的方法,實例分析了php使用function_exists檢測函數(shù)是否存在及調用的相關技巧,非常具有實用價值,需要的朋友可以參考下2015-03-03
php指定長度分割字符串str_split函數(shù)用法示例
這篇文章主要介紹了php指定長度分割字符串str_split函數(shù)用法,結合實例形式分析了str_split函數(shù)分割字符串的具體操作技巧,需要的朋友可以參考下2017-01-01

