Как я могу удалить часть 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']);
вам придется протестировать его, но я думаю, что это решение должно быть немного быстрее, чем Михай Йорга
$offset = str_pos($s['image'], ',');
$data = base64_decode(substr($s['image'], $offset));