10

我目前正在执行以下操作来解码 PHP 中的 base64 图像:

   $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 不是我的强项。提前致谢。

4

5 回答 5

30

您可以使用正则表达式:

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

如果您要替换的文本是图像中的第一个文本,则^在正则表达式的开头添加会使其更快,因为它不会分析整个图像,只分析前几个字符:

$img = preg_replace('#^data:image/[^;]+;base64,#', '', $s['image']);
于 2013-03-08T09:58:05.023 回答
21

功能file_get_contents删除标题并使用base64_decode功能,因此您可以获得清晰的内容图像。

试试这个代码:

$img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0gA...';
$imageContent = file_get_contents($img);
于 2014-01-23T07:59:08.870 回答
0

您必须对其进行测试,但我认为此解决方案应该比 Mihai Iorga 的稍快

$offset = str_pos($s['image'], ',');
$data = base64_decode(substr($s['image'], $offset));
于 2013-03-08T09:58:50.387 回答
0

我用 javascript/kendo 生成图像并通过 ajax 将其发送到服务器。

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

在这种情况下它不起作用。就我而言,这段代码效果更好:

$contentType  = mime_content_type($s['image']);
$img = preg_replace('#^data:image/(.*?);base64,#i', '$2', $s['image']);
于 2018-10-12T15:38:26.310 回答
0

您可以使用正则表达式来删除图像或 pdf 数据格式。

data.replace(/^data:application\/[a-z]+;base64,/, "")
于 2020-05-12T09:05:42.637 回答