2013-03-08 28 views
7
圖像部分

我目前在做以下到PHP的base64圖像解碼:我怎樣才能剝去數據:從任何圖像類型的一個base64字符串在PHP

$img = str_replace('data:image/jpeg;base64,', '', $s['image']); 
    $img = str_replace('data:image/png;base64,', '', $s['image']); 
    $img = str_replace('data:image/gif;base64,', '', $s['image']); 
    $img = str_replace('data:image/bmp;base64,', '', $s['image']); 
    $img = str_replace(' ', '+', $img); 
    $data = base64_decode($img); 

正如你可以在上面看到,我們正在接受四種最標準的圖像類型(jpeg,png,gif,bmp);

但是,這些圖像中的一些非常大,每次掃描通過str_replace 4-5次似乎是一個可怕的浪費和非常低效率。

有沒有一種方法可以可靠地去除數據:單通道中的base64圖像字符串的圖像部分?也許通過檢測字符串中的第一個逗號?

我很抱歉,如果這是一個簡單的問題,PHP不是我的特長。提前致謝。

回答

24

您可以使用正則表達式:

$img = preg_replace('#data:image/[^;]+;base64,#', '', $s['image']); 

如果您要更換的文本圖像中的第一個文本,在正則表達式的開頭添加^將使它更快,因爲它贏得了」牛逼分析整個圖像,只是前幾個字符:

$img = preg_replace('#^data:image/[^;]+;base64,#', '', $s['image']); 
+0

你拿蛋糕! – TFennis 2013-03-08 09:59:55

+0

完美!雖然所有的答案都很好,並且完美地工作。看來你的方法是最快的,所以我會盡快給你答案。非常感謝。 :) – gordyr 2013-03-08 10:02:59

+0

@gordyr歡迎您 – 2013-03-08 10:04:22

0

你將不得不測試它,但我認爲這個解決方案應該比米哈伊Iorga的

稍快
$offset = str_pos($s['image'], ','); 
$data = base64_decode(substr($s['image'], $offset)); 
11

功能file_get_contents刪除標題和使用base64_decode功能, 所以你得到清晰的內容圖像。

試試這個代碼:

$img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0gA...'; 
$imageContent = file_get_contents($img); 
+1

這應該是被接受的答案。很聰明的解決方案 – raphael 2015-08-31 11:27:33

+0

這絕對應該是被接受的答案,更優雅的解決方案 – 2015-10-25 16:34:44

相關問題