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