2015-07-02 15 views
3

尋找一些基於正則表達式的幫助!已經搜索過該網站,但沒有找到任何適用於我的案例的解決方案。Strip img src從張貼的屏幕截圖數據php

我有一個向用戶顯示的窗體,其中一個文本區域是屏幕截圖的粘貼區域。目前這個屏幕截圖數據被輸入到數據庫中,但是由於這開始使數據庫變得非常大,我決定爲每個粘貼的屏幕截圖創建一個單獨的圖像,因爲這些數據比數據庫中佔用的空間要少。

我遇到的問題是從截圖中剝離img src標籤等,併成功將數據保存到可正確打開的圖像文件中。

粘貼的截圖數據插入到數據庫如下:

<img src="data:image/png;base64,_BASE_64_DATA_HERE"><br> 

任何想法,發佈這個數據,就如何剝離不必要的物品,只是離開的base64數據時,創建一個保存的PNG圖像?

目前我有這個,這是不是很爲我工作,只是創建不能打開的圖像:

list($type, $data) = explode(';', $data); 
list(, $data)  = explode(',', $data); 
$data = base64_decode($screenshot); 
$data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $screenshot)); 

file_put_contents('screenshots/screens.png', $data); 

$screenshot是粘貼的數據。

回答

1

我可以建議移除^開始字符串錨和使用preg_match與使用\K將與[^"<]*模式來拍攝的圖像的Base64數據之前截斷所有 - 比"<其他0個或更多字符(可能是,根據要求

preg_match('#data:image/\w+;base64,\K[^"<]*#i', '<img src="data:image/png;base64,_BASE_64_DATA_HERE"><br>', $match); 
echo $match[0]; // => _BASE_64_DATA_HERE 

IDEONE demo

+0

感謝這個,條:它甚至可以降低到[^"]*)。我剛剛嘗試過使用它來創建PNG,但是創建的圖像仍然無法準確打開。這會如何實現? –

+0

我不知道你在$截圖中傳遞了什麼字符串,我不能告訴你如何重新創建圖像。如果正確的字符串數據保存在數據庫中,我認爲它不在當前問題的範圍內。 –

+0


是$截圖的值,是保存到數據庫中的值。我想使用base64的數據來形成圖像,將其保存爲PNG格式,而不是保存在數據庫中。 –