Как я могу удалить часть data: image из строки base64 любого типа изображения в PHP

в настоящее время я делаю следующее для декодирования изображений 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);

однако некоторые из этих изображений очень большие, и сканирование каждого из них 4-5 раз с помощью str_replace кажется ужасной тратой и ужасно неэффективным.

есть ли способ надежно удалить часть data: image строки изображения base64 за один проход? Возможно обнаружив первую запятую в строке?

мои извинения если это простая проблема, PHP не является моей сильной стороной. Спасибо заранее.

3 ответов


вы можете использовать регулярное выражение:

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

Если текст, который вы заменяете, является первым текстом на изображении, добавив ^ в начале regexp сделает это намного быстрее, потому что он не будет анализировать все изображение, только первые несколько символов:

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

функции file_get_contents удалить заголовок и использовать


вам придется протестировать его, но я думаю, что это решение должно быть немного быстрее, чем Михай Йорга

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