如何从PHP中的任何图像类型的base64字符串中剥离数据:图像部分

gor*_*dyr 8 php string base64

我目前正在执行以下操作来解码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);
Run Code Online (Sandbox Code Playgroud)

如您所见,我们接受四种最标准的图像类型(jpeg,png,gif,bmp);

然而,其中一些图像非常大,用str_replace扫描每个图像4-5次似乎是一种可怕的浪费而且非常低效.

有没有办法可以可靠地剥离数据:一次传递中base64图像字符串的图像部分?也许通过检测字符串中的第一个逗号?

如果这是一个简单的问题我很抱歉,PHP不是我的强项.提前致谢.

Car*_*rós 27

您可以使用正则表达式:

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

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

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


小智 15

功能file_get_contents删除标题和使用base64_decode功能,使您获得清晰的内容图像.

试试这段代码:

$img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0gA...';
$imageContent = file_get_contents($img);
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。非常聪明的解决方案! (2认同)