Как я могу удалить данные: часть изображения из строки 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 кажется ужасной тратой и ужасно неэффективной.

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

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

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

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

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

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

Функция file_get_contents удаляет заголовок и использует функцию base64_decode , поэтому вы получаете четкое изображение содержимого.

Попробуйте этот код:

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

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

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